我有两种组装方法:
DWToHex PROTO:DWORD
DWORD
将作为输入参数内部传递的类型的二进制整数修改EAX
为十六进制表示,指向在单个参数内部传递的指针。它是用于调试目的的功能,它工作正常。ProcA PROTO:DWORD
- 除了破坏下面的内容之外什么都不做EAX
是代码:( 抱歉格式化 -c 似乎常规代码格式化在这里不起作用)
; ################################################# #######################
`.386 ; set processor type`
`.model flat, stdcall ; memory model & calling convention`
`option casemap :none ; case sensitive`
`.code`
; ################################################# #######################
procA public addrSTD:DWORD
ret
ProcA endp
; ################################################# #######################
end
这是调试跟踪:
.data
MsgBoxCaption4 db "before calling", 0
MsgBoxCaption5 db "after calling", 0
.data?
N DWORD ?
NTXT db 16 dup(?)
.code
mov eax, N
invoke cx_DWToHex, addr NTXT
invoke MessageBox, NULL, addr NTXT, addr MsgBoxCaption4, MB_OK ; show eax as hexadecimal
mov eax, N ; ***** point A ****
invoke ProcA, addr sdt ; ***** point B ****
; mov eax, N
invoke cx_DWToHex, addr NTXT
invoke MessageBox, NULL, addr NTXT, addr MsgBoxCaption5, MB_OK ; show eax as hexadecimal
..................................................... .........................................................
问:
为什么EAX
in点A点和B点的内容不一样?