17

次の組み立て説明書を理解するには、助けが必要です。someUnknownValue += 20994A でアドレスを呼び出しているように思えます。

E8 32F6FFFF - call std::_Init_locks::operator=+20994A
4

2 に答える 2

60

逆アセンブリを取得するために使用しているものは何でも、呼び出しのターゲットを既知のシンボルからのオフセットとして与えることで、役に立ちますが、オフセットが非常に大きいため、おそらく混乱しています。

呼び出しの実際のターゲットは、次のように計算できます。

  • E8call相対オフセットを持つ です。
  • 32 ビット コード セグメントでは、オフセットは符号付き 32 ビット値として指定されます。
  • この値はリトルエンディアンのバイト順です。
  • オフセットは、次の命令のアドレスから測定されます。

例えば

<some address>       E8 32 F6 FF FF         call <somewhere>
<some address>+5     (next instruction)
  • オフセットは0xFFFFF632.
  • 符号付き 32 ビット値として解釈されます。これは-0x9CE.
  • call命令は5<some address>バイト長です。次の命令は にあり<some address> + 5ます。
  • したがって、呼び出しのターゲット アドレスは<some address> + 5 - 0x9CE.
于 2012-04-29T23:31:40.583 に答える