I 2つの組立方法有する:EAXの内容が異なるのはなぜですか?
DWToHex PROTO:DWORD
は、単一のパラメータの内部に渡されるポインタれる16進表現へ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の戻り値が実際に表示されます。 –
@HansPassant procAコードは、太字のテキストの直後(2)に掲載されています – aviad
なぜ「addrSTD」という名前ですか? –