dll-IAT中的指针-物理地址
dll- pointers in IAT- physical addresses?
任何地方的解释都是,导入函数的进程的IAT都填充了从它想要的dll导出的函数的地址。
但是,这些指向导入函数的指针在什么地址空间中?如果它是一个虚拟地址,那就没有意义了,因为导入过程有自己的虚拟空间,而那些dll函数不在其中
但是保护模式不允许物理寻址,所以它也不能是物理地址。什么东西?
IAT的全部原因正是因为DLL是在虚拟地址空间中的某个未知偏移量加载的。对于ASLR,它实际上是故意不可预测的。IAT充当固定位置处的跳转表,以不可预测位置处的函数。
显然,IAT只能在DLL加载到进程空间后才能填充。这实际上是LoadLibrary
执行的按键操作。实际加载DLL可能会在稍后发生,因为它是按需分页的。
相关文章:
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 将地址分配给本地指针后,公共对象的变量将消失
- 如何在程序集函数中将元素数组作为参数传递时转发 ARM 寄存器的地址指针
- 如何使用构造函数初始化内存地址(指针变量)?
- 数组基础地址指针
- 如何在不使用返回的情况下从函数获取变量的地址(指针)
- 如何确保QFile写入相同的物理地址?
- 编译器如何知道物理地址的对齐方式
- 保存QWidgets的地址/指针
- C++ 读取内存地址/指针和偏移量
- 将虚拟地址的逻辑地址转换为物理地址
- 如何通过虚拟寻址区域中的指针获取物理寻址区域中的地址
- 从存储在 CTreeCtrl 的 LPARAM 中的结构中检索地址/指针 (IXMLDOMNode*) - 不起作用
- 简单的C++地址/指针澄清
- 如何获取成员函数的地址指针
- 当“按引用传递”成为强制传递而不是按地址/指针传递时
- 是否可以访问物理地址0
- dll-IAT中的指针-物理地址
- C++ 为什么不是同一个地址(指针)