我有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