3

C で記述した単純な exe の .text セクションを見ているところです。いくつかの x86 オペコードがどのように構造化されているかを理解しようとしています。

私が読んだことから、0xe9 は相対ジャンプ (JMP) の 1 バイト オペコードのようですが、残りのバイトが実際にジャンプ アドレスをどのように形成するかはわかりません。

スーパー オンライン 逆アセンブラー ODAを使用してプログラムを逆アセンブルすると、次のように表示されます。

.text:0x00411005    e936210000  jmp    0x00413140

したがって、0xe9 は JMP 命令であり、これは 32 ビットの実行可能ファイルであるため、次の 4 バイトがジャンプのアドレスになると想定していますが、それらが実際にどのように構成されているかについては少し確信が持てません。

誰かが彼に光を当てるのを助けることができれば、私はそれを感謝します.

ありがとう

4

1 に答える 1

14

これは相対ジャンプです。つまり、宛先は次の命令に対して相対的に指定されます。

この命令はアドレス 0x411005 にあり、5 バイトかかるため、次の命令はアドレス 0x41100a にあります。ジャンプする相対的な量 (リトル エンディアンとしてエンコードされます。つまり、バイトは最下位から最上位の順に格納されます) は 0x2136 です。したがって、ジャンプ先は 0x41100a + 0x2136 = 0x413140 です。

于 2013-09-12T11:07:27.420 に答える