1

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 モードでビルドされた場合、そのような追加のコードは添付されません。

4

1 に答える 1

0

これらは単なるアラインメントバイトだと思うので、コードは16バイトの境界にアラインされ、わずかに高速に実行されます。

于 2011-04-07T12:26:03.303 に答える