2012-02-04 66 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 ,但是。

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

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