新人报道,分享一段代码,请多关照
这段代码的作用就是以MessageBox 的方式显示一个 DWORD 的16进制值。供调试用的。
.386
.MODEL FLAT
INCLUDE WINDOWS.INC
INCLUDELIB IMPORT32.LIB
EXTRN ExitProcess:PROC
EXTRN MessageBoxA:PROC
EXTRN LoadLibraryA:PROC
EXTRN GetProcAddress:PROC
.Data
user32 DB "User32.Dll",0
szMessageBoxA DB "MessageBoxA",0
ddMessageBoxA DD 0
.Code
_Start:
PUSH OFFSET user32
CALL LoadLibraryA
PUSH OFFSET szMessageBoxA
PUSH EAX
CALL GetProcAddress
PUSH EAX
PUSH 012345678H
CALL _ShowDWORD
PUSH 0
CALL ExitProcess
;***********************************************************
; _ShowDWORD PROC stdcall,dd2Show:DWORD,addrOfMBA:DWORD
; 功能: 用MessageBox的方式显示一个双字的16进制值
; 参数说明:
; dd2Show: 要显示的双字
; addrOfMBA: API MessageBoxA 的地址
; 调用方式:
; PUSH addrOfMBA
; PUSH dd2Show
; CALL _ShowDWORD
;***********************************************************
_ShowDWORD PROC
PUSH EBP
MOV EBP,ESP
SUB ESP,12
PUSH EAX
PUSH ECX
PUSH EDI
PUSHF
STD
MOV EDI,EBP
DEC EDI
MOV AL,0
STOSB
MOV AL,'H'
STOSB
MOV EAX,DWORD PTR
MOV ECX,8
_Hex2Ascii:
PUSH EAX
AND AL,0FH
ADD AL,030H
CMP AL,039H
JLE _IsNumber
ADD AL,7
_IsNumber:
STOSB
POP EAX
SHR EAX,4
LOOP _Hex2Ascii
MOV AL,'X'
STOSB
MOV AL,'0'
STOSB
INC EDI
CLD
PUSH 0
PUSH 0
PUSH EDI
PUSH 0
CALL DWORD PTR
;如果不是在壳之类的代码中,这里可以改成 CALLMessageBoxA
POPF
POP EDI
POP ECX
POP EAX
ADD ESP,12
MOV ESP,EBP
POP EBP
RET 8
_ShowDWORD ENDP
End _Start
页:
[1]