【发布时间】:2012-12-11 17:00:33
【问题描述】:
我在 windows XP 环境下学习 fasm 在阅读 fasm 源代码时,我发现了调用宏
invoke MessageBox,0,[_strbuf],_msgcap,MB_ICONINFORMATION+MB_OK
并导入宏。
import user,\
MessageBox,'MessageBoxA',\
wsprintf,'wsprintfA'
但我找不到任何 MessageBoxA 的硬编码地址,也找不到在汇编代码中加载 user32.dll。 只有宏定义标记字符串而不是地址。
我的假设是这样的
这里有加载user32.dll并返回加载的dll起始地址的代码=>这里我们把返回的地址调用到位置A
有硬编码地址和标签对(例如 MessageBoxA = 0x00000000)
所以'call'指令可以调用MessageBoxA标签(将转换为位置A + MessageBoxA偏移量)
我的假设错了吗? 我想知道 API 是如何被调用的。
谢谢
【问题讨论】:
标签: windows api assembly call fasm