汇编代码中是如何确定apI函数的地址的呢?
问:对于dll中的函数地址在运行前是不知道的,那在文件代码中是如何编写 “call 函数地址” 之类的指令的呢?
答:虽然不知道函数的地址是什么,但是知道函数的地址写在哪里。可以[函数地址的指针]来读取函数的地址
比如:
上图是 汇编中调用KERNEL32.GetModuleHandleA的语句,让我们查看这条语句跳转到哪里
由上图可知 语句跳转到了地址为0040127A的位置,这里是一个JMP指令,这里的意思是说,对402004的值解引用,然后跳转,可能说的不太清楚,直接看图
下图是 402004地址的值
由图可知00402004的值是75f816d0
下图是下一个跳转的位置
由图可知 API地址的位置正是402004的位置,看来402004就是KERNEL32库的IAT了,在程序装载到进程时,PE装载器会把API的地址放入IAT的位置,在程序只要用解引用的方式调用IAT地址的值,就可以以不变应万变了
本文作者:乘舟凉
本文链接:https://www.cnblogs.com/czlnb/p/13971538.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步