私には2つの組み立て方法があります:
DWToHex PROTO:DWORD
DWORD
内部の入力パラメーターとして渡される型の2進整数EAX
を、単一のパラメーター内で渡されるポインターである16進表現に変更します。これはデバッグ目的で使用される関数であり、正常に動作します。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
の内容が同じでないのはなぜですか?