我正在阅读古老的 a.out 格式的手册页(位于这里),试图了解 Unix 可执行格式的演变。我想知道一件事。手册页说,如果幻数是 OMAGIC,则文本段不会与其他进程共享,并且不会对其进行写保护,并且数据段在内存中紧随其后(在下一个字节)开始。但如果幻数是 NMAGIC 或 ZMAGIC,则文本段被写保护并与运行同一程序的其他进程共享,在这种情况下,数据段从下一个 1024 字节块的开头开始。为什么会这样呢?为什么共享文本段需要从 1024 字节边界开始的数据段?我有一种感觉,这是普遍适用的,而不是特定于 a.out 格式。
答案1
这样做是为了在页面边界上对齐数据段(这会自动强制它与文本段位于不同的页面中)。有了这个线索,您应该能够找到更多信息,例如 John Levine 在链接器和加载器。