誰かがx64プラットフォームでの次の動作を説明できますか?実行可能ファイルからx64の別のdllの関数を呼び出すと、逆アセンブルされたコードは次のようになります。
000000014000149E FF 15 34 CF 00 00 call qword ptr [__imp_CFuncInDll (14000E3D8h)]
デバッガーがこの絶対アドレス14000E3C0hに対する相対アドレスを計算していることに気付きました。ただし、x86コードとは異なり、アドレス14000E3D8hを分解すると、ゴミのように見えます。
__imp_CFuncInDll:
000000014000E3D8 19 10 sbb dword ptr [rax],edx
000000014000E3DA 25 FC FE 07 00 and eax,7FEFCh
000000014000E3DF 00 14 10 add byte ptr [rax+rdx],dl
000000014000E3E2 25 FC FE 07 00 and eax,7FEFCh
000000014000E3E7 00 00 add byte ptr [rax],al
.......
呼び出しに足を踏み入れると、ガベージアドレスに入る代わりに、コードが有効なアドレスにジャンプすることがわかります。
000007FEFC251019 E9 62 00 00 00 jmp CFuncInDll (7FEFC251080h)
私の質問:
ターゲットが別のモジュールにある場合、呼び出し命令はx64でどのようにデコードされますか?x86では、このコードの呼び出しターゲットは次のとおりです。
FF 15 34 CF 00 00 call
だった:ターゲット=次の命令アドレス+ 0x0000CF34
x64では、そうではないように見えます。