我有2种装配方法:为什么EAX的内容不同?
DWToHex PROTO:DWORD
会修改作为输入参数传递 内部EAX
成十六进制表示DWORD
类型的二进制整数,指针到该单个参数内通过。它是用于调试目的的功能,它工作正常。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
的内容在B点的A点不一样?
你问什么ProcA没有公布其代码没有对eax做什么。看起来它改变了EAX。如果你在A点上设置断点,那么你实际上可以看到MessageBox的返回值。 – 2012-04-20 21:26:02
@HansPassant procA代码在粗体文本后贴上(2) – aviad 2012-04-20 21:32:46
为什么命名为“addrSTD”? – 2012-04-20 21:35:31