首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASM,使用asm调用函数

ASM,使用asm调用函数
EN

Stack Overflow用户
提问于 2012-02-04 21:37:07
回答 3查看 955关注 0票数 2

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

我使用的是Visual Studio 2010。

我该怎么做呢?

代码语言:javascript
复制
call 774a7fdch

不工作,我怎么能传递调用函数的地址?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-13 12:20:54

我以前在VS2010中遇到过同样的问题。尝试调用0x774a7fdc

票数 3
EN

Stack Overflow用户

发布于 2013-01-13 23:44:29

注意CALL指令,它依赖于位置。它被编码为:

代码语言:javascript
复制
E8 XX XX XX XX

其中X是从下一条指令的内存地址到要调用的函数的地址之间的距离。此距离也称为增量偏移。

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

代码语言:javascript
复制
mov eax, 774a7fdch
call eax

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

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

我不知道这是否解决了你的问题,因为我不确定你所说的“不工作”是什么意思。

票数 4
EN

Stack Overflow用户

发布于 2012-02-04 21:57:07

应该与

代码语言:javascript
复制
call dword ptr 0x774a7fdc
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9141256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档