Ben*_*oyo 4 portable-executable
可执行文件需要首选加载地址并因此保留位置相关代码而不是简单地在整个文件中使用 RVA 是否有任何充分的理由?
对我来说,这看起来像是一个重大的设计缺陷,我不明白人们是如何想出这个想法的。
我想原因更多的是历史原因而不是现实原因。
\n\n引用 Matt Pietrek 的话,来自他著名的“ Peering Inside the PE”》中的话:
\n\n\n\n\n众所周知,Windows NT 具有 VAX\xc2\xae VMS\xc2\xae 和 UNIX\xc2\xae\n 遗产。许多 Windows NT 创建者在加入 Microsoft 之前都为这些平台进行了设计和编码。当设计 Windows NT 时,他们很自然地尝试通过使用以前编写和测试的工具来最小化引导时间。这些工具生成和使用的可执行文件和目标模块格式称为 COFF(通用对象文件格式的缩写)。 [...] COFF 格式本身是一个很好的起点,但需要\n 进行扩展以满足现代操作系统(如 Windows NT 或 Windows 95)的所有需求。此更新的结果是可移植\n 可执行格式。
\n
所以PE格式是基于COFF格式的,后者有了重定位的概念的概念:它们允许系统(更准确地说是系统的加载程序)通过修补位置相关地址来在运行时对 PE 进行变基。
\n\nPE官方文档明确将Relocations命名为“COFF Relocations”,所以我猜测PE重定位是从COFF继承的,并不是PE格式本身带来的新添加。
\n\n总而言之,我的猜测是位置无关的 PE 被丢弃(如果甚至曾经考虑过),因为 COFF 格式已经具有实现相同功能的重定位概念。
\n| 归档时间: |
|
| 查看次数: |
445 次 |
| 最近记录: |