【发布时间】:2021-03-06 02:22:55
【问题描述】:
维基百科是这样说搬迁的:
PE 文件通常不包含与位置无关的代码。反而 它们被编译为首选基地址,并且所有地址 编译器/链接器发出的提前修复。如果一个 PE 文件 无法在其首选地址加载(因为它已被占用 通过别的东西),操作系统将重新设置它。这涉及 重新计算每个绝对地址并修改代码以使用 新的价值观。加载程序通过比较首选和实际 加载地址,并计算增量值。然后将其添加到 提供内存新地址的首选地址 地点。基本重定位存储在列表中,并根据需要添加, 到现有的内存位置。
我很困惑为什么0x00400000(默认首选基地址)除了进程的基地址之外还有其他内容。我的理解是,在虚拟内存中,进程可以看到一个空的内存空间,它是唯一存在的东西。考虑到这一点,最初在流程本身之前会有什么东西?
【问题讨论】:
-
DLL 很重要,DLL 也是 PE 文件。在 0x00400000 加载 EXE 的天数大约超过 as well。
标签: winapi portable-executable