为什么加载的PE二进制文件需要IAT?

时间:2018-06-22 18:14:30

标签: windows executable portable-executable

我只是想了解二进制格式,在学习PE格式时,我发现它具有一个IAT,用于查找内存中可用的导入功能。

我不明白为什么加载器会有这种额外的间接级别。由于已加载的对象已经知道导入的函数在内存中的加载位置,因此为什么它不仅仅在程序集中引用该函数,而是为什么不填充IAT,然后在程序执行期间首先访问IAT,然后从那里查找地址。

我不确定我对此的理解是否正确。有人可以帮忙澄清一下。

1 个答案:

答案 0 :(得分:3)

加载DLL时,加载程序会修改IAT,并使用导入函数的实际地址填充它。 DLL中的代码通过IAT条目进行间接调用。避免必须修补代码(即修改程序集),这种修补可以防止代码共享。

一个不错的网页,显示了is here管道。