【发布时间】:2012-02-04 13:37:06
【问题描述】:
我想在 C++ 程序中使用 ASM 调用地址 774a7fdch(kernel32.dll 函数) 中的函数
我正在使用 Visual Studio 2010。
我该怎么做?
call 774a7fdch
不行,怎么传调用函数地址?
谢谢!
【问题讨论】:
我想在 C++ 程序中使用 ASM 调用地址 774a7fdch(kernel32.dll 函数) 中的函数
我正在使用 Visual Studio 2010。
我该怎么做?
call 774a7fdch
不行,怎么传调用函数地址?
谢谢!
【问题讨论】:
小心 CALL 指令,它取决于位置。编码为:
E8 XX XX XX XX
X 是从下一条指令的内存地址到您正在调用的函数地址的距离。该距离也称为增量偏移。
如果您不知道代码在内存中的位置以便进行计算,您可以尝试将地址加载到寄存器中:
mov eax, 774a7fdch
call eax
不过,这将是 7 个字节而不是 5 个。
另外,正如另一位用户指出的那样,硬编码函数的地址可能不是一个好主意,因为它们可以四处移动。
我不知道这是否解决了您的问题,因为我不确定您所说的“不起作用”是什么意思。
【讨论】:
我之前在VS2010中也遇到过同样的问题。 尝试调用 [0x774a7fdc]
【讨论】:
应该使用
call dword ptr 0x774a7fdc
【讨论】: