我只是想了解二进制格式,在学习PE格式时,我发现它具有一个IAT,用于查找内存中可用的导入功能。
我不明白为什么加载器会有这种额外的间接级别。由于已加载的对象已经知道导入的函数在内存中的加载位置,因此为什么它不仅仅在程序集中引用该函数,而是为什么不填充IAT,然后在程序执行期间首先访问IAT,然后从那里查找地址。
我不确定我对此的理解是否正确。有人可以帮忙澄清一下。
答案 0 :(得分:3)
加载DLL时,加载程序会修改IAT,并使用导入函数的实际地址填充它。 DLL中的代码通过IAT条目进行间接调用。避免必须修补代码(即修改程序集),这种修补可以防止代码共享。
一个不错的网页,显示了is here管道。