我想在C ++程序中使用ASM调用地址774a7fdch(kernel32.dll函数)中的函数
我正在使用Visual Studio 2010。
我该怎么办?
call 774a7fdch
不起作用,我怎样才能调用函数地址?
谢谢!
答案 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