MASM で次のような簡単なプログラムを作成しました。
.386
.model flat, stdcall
option casemap:none
.data
szName db "MASM", 0
.code
start:
mov eax, DWORD PTR [szName]
ret
end start
OllyDbg デバッガーでコードをチェックすると、次のようになります。
CPU Disasm
Address Hex dump Command Comments
00401004 CC INT3
00401005 /. E9 06000000 JMP 00401010
0040100A | CC INT3
0040100B | CC INT3
0040100C | CC INT3
0040100D | CC INT3
0040100E | CC INT3
0040100F | CC INT3
00401010 |> A1 00404000 MOV EAX,DWORD PTR DS:[404000] ; ASCII "MASM"
00401015 \. C3 RETN
00401016 A1 DB A1
私の質問は、実際のコード (00401010) の前に、これらの 11 バイト (00401005-0040100F) にパッチを適用するコンポーネントはどれですか? なぜ?
Windows XP SP3、MASM、および OllyDbg を使用しています。
OK、ここに説明があります (気になる方へ): このコードは DEBUG モードでビルドされているため、アセンブラー/リンカー (どちらが正確かはわかりません) がこれらの余分なバイトを追加します。JMP は、一連の INT 3 命令をバイパスする必要があるため、プログラムを実行できるようにするために存在します。プログラムが RELEASE モードでビルドされた場合、そのような追加のコードは添付されません。