有人能向我解釋,在x64平臺上的以下行爲: 如果我從我的可執行文件在64位另一個DLL調用一個函數的反彙編代碼看起來是這樣的:64調用另一個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解碼時的目標是在另一個模塊? 在86這個碼的呼叫目標:
FF 15 34 CF 00 00 call
是:目標=下一個指令地址在x64 + 0x0000CF34
儘管它看起來像這樣情況並非如此。