Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ dll-IAT中的指针-物理地址?_C++_Windows_Winapi_Dll_Import - Fatal编程技术网

C++ dll-IAT中的指针-物理地址?

C++ dll-IAT中的指针-物理地址?,c++,windows,winapi,dll,import,C++,Windows,Winapi,Dll,Import,任何地方的解释都是,导入函数的进程的IAT中填充了它希望从dll中导出的函数的地址 但是这些指向导入函数的指针位于什么地址空间?如果它是一个虚拟地址,那就没有意义了,因为导入过程有自己的虚拟空间,而那些dll函数不在其中 但是受保护模式不允许物理寻址,所以它也不能是物理地址。给出了什么?IAT的全部原因正是因为DLL加载在虚拟地址空间中的某个未知偏移量。对于ASLR,它实际上是故意不可预测的。IAT在固定位置充当跳转表,在不可预测的位置充当功能跳转表 显然,只有将DLL加载到进程空间后,才能填写

任何地方的解释都是,导入函数的进程的IAT中填充了它希望从dll中导出的函数的地址

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


但是受保护模式不允许物理寻址,所以它也不能是物理地址。给出了什么?

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


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

您所说的“那些DLL函数不在其中”是什么意思?进程加载DLL时发生的第一件事是DLL映射到进程地址空间!您误解了虚拟地址的概念。虚拟地址空间是为整个进程创建的,并在这个进程中为所有加载的映像和分配的内存共享。我现在明白了。dll被加载到进程的虚拟地址空间。我以为进口表刚刚填好了,就这样。