ASM,用asm调用函数

时间:2012-02-04 13:37:07

标签: function assembly

我想在C ++程序中使用ASM调用地址774a7fdch(kernel32.dll函数)中的函数

我正在使用Visual Studio 2010。

我该怎么办?

call 774a7fdch

不起作用,我怎样才能调用函数地址?

谢谢!

3 个答案:

答案 0 :(得分:4)

小心CALL指令,它取决于位置。它被编码为:

E8 XX XX XX XX

其中X是距离,从下一条指令的内存地址到您正在调用的函数的地址。此距离也称为 delta offset

如果您无法知道代码在内存中的位置以进行计算,您可以尝试在寄存器中加载地址:

mov eax, 774a7fdch
call eax

然而,这将是7个字节而不是5个字节。

此外,正如另一位用户指出的那样,硬编码函数的地址可能是一个坏主意,因为它们可以移动。

我不知道这是否能解决你的问题,因为我不确定你的意思是“不起作用”。

答案 1 :(得分:3)

我之前在VS2010遇到过同样的问题。 尝试调用[0x774a7fdc]

答案 2 :(得分:1)

应该使用

call dword ptr 0x774a7fdc