2012-02-04 65 views
2

調用函數我想打電話與ASM的函數,而在地址774a7fdch(KERNEL32.DLL功能)的C++程序ASM,與ASM

我使用Visual Studio 2010。

我該怎麼辦?

call 774a7fdch 

不起作用,我該如何通過調用函數地址?

謝謝!

回答

3

工作,我已經在VS2010以前也遇到過同樣的問題。 嘗試調用[0x774a7fdc]

1

應與

call dword ptr 0x774a7fdc 
+0

它說: 「不正確的操作數類型」 ...:S – Taru 2012-02-04 14:09:15

+0

@TaruStolovich MOV EBX,0x774a7fdc 調用EBX 作品? – farnsworth 2012-02-04 14:18:57

4

請注意CALL指令,它取決於位置。它的編碼爲:

E8 XX XX XX XX 

其中x是距離從下一條指令,我們在調用函數的地址的內存地址。這個距離也被稱爲增量偏移量

如果你不知道你的代碼將在存儲器中,以便做計算,你可以嘗試在寄存器中加載地址,而不是:

mov eax, 774a7fdch 
call eax 

這將是7個字節,而不是5 ,但是。

另外,正如另一位用戶指出的,對函數地址進行硬編碼可能是一個壞主意,因爲它們可以四處移動。

我不知道這是否能解決您的問題,因爲我不確定您的意思是「不起作用」。