IAT-物理地址中的DLL指针?

时间:2014-10-02 00:13:53

标签: c++ windows winapi dll import

每个地方的解释都是导入函数的进程的IAT用它想要的dll中的导出函数的地址填充。

但是这些指向导入函数的地址空间是什么?如果它是一个虚拟地址,那就没有意义,因为导入过程有自己的虚拟空间,而那些dll函数不在其中。

但保护模式不允许物理寻址,因此它也不能成为物理地址。是什么给了什么?

1 个答案:

答案 0 :(得分:1)

IAT的全部原因正是因为DLL在虚拟地址空间中的某个未知偏移处加载。有了ASLR,它实际上是故意无法预测的。 IAT用作跳转表固定位置不可预知位置的功能。

显然,只有在DLL加载到进程空间后才能填充IAT。这实际上是LoadLibrary执行的关键操作。实际上加载DLL可能会在以后发生,因为它是需求分页的。