汇编代码中是如何确定apI函数的地址的呢?

问:对于dll中的函数地址在运行前是不知道的,那在文件代码中是如何编写 “call  函数地址” 之类的指令的呢?

答:虽然不知道函数的地址是什么,但是知道函数的地址写在哪里。可以[函数地址的指针]来读取函数的地址

比如:           

 

 

 上图是 汇编中调用KERNEL32.GetModuleHandleA的语句,让我们查看这条语句跳转到哪里

 

 

 由上图可知 语句跳转到了地址为0040127A的位置,这里是一个JMP指令,这里的意思是说,对402004的值解引用,然后跳转,可能说的不太清楚,直接看图

下图是 402004地址的值

 

 

由图可知00402004的值是75f816d0

下图是下一个跳转的位置

 

 由图可知 API地址的位置正是402004的位置,看来402004就是KERNEL32库的IAT了,在程序装载到进程时,PE装载器会把API的地址放入IAT的位置,在程序只要用解引用的方式调用IAT地址的值,就可以以不变应万变了

 

 

      

 

posted @ 2020-11-13 21:54  乘舟凉  阅读(652)  评论(0编辑  收藏  举报