我们之前分析过导入表,在PE文件加载前IAT表和INT表相同,只有文件加载后才能根据INT表通过序号或名称使用GetProcessAddress函数获得函数地址贴到IAT表中
我们观察记事本程序,记事本程序在PE文件加载前就把函数地址贴到IAT表中了。这种情况叫做绑定导入表
这样做的好处是程序运行快,坏处是万一dll没有占住要使用的ImageBase,会出现错误,还有万一dll被修改了,值会发生改变
如果导入表中的时间戳为0代表dll的所有函数地址还没有绑定,当时间戳为-1时,意味着函数地址已经被绑定
那么真正的绑定时间在哪呢,是在绑定导入表中
绑定导入表在数据目录的第12项
绑定导入表的第一项就是时间戳,第二项是dll名称,第三项是这个dll使用了多少dll,因为我们调用的系统函数也会调用别的dll
每一个结构中的OffsetModuleName需要加上第一个绑定导入表的地址才是真正的dll名称
一个绑定导入表后跟的不是下一个绑定导入表,而是这个dll引用的别的dll
最后一项是一个全0的结构
绑定导入表
最新推荐文章于 2023-04-19 23:58:22 发布