Executable
a.out - 如果文本段未共享,則數據段和文本段是連續的。為什麼會這樣?
我正在閱讀古代 a.out 格式的手冊頁(位於此處),試圖了解 Unix 可執行格式的演變。我在想一件事。手冊頁說,如果幻數是 OMAGIC,那麼文本段不與其他程序共享,也沒有防寫,並且數據段在記憶體中緊隨其後(在下一個字節處)開始。但如果幻數是 NMAGIC 或 ZMAGIC,則文本段是防寫的,並與執行同一程序的其他程序共享,在這種情況下,數據段從下一個 1024 字節塊的開頭開始。為什麼會這樣?為什麼文本段的共享需要從 1024 字節邊界開始的數據段?我覺得這是普遍適用的東西,並不特定於 a.out 格式。
這樣做是為了在頁面邊界上對齊數據段(這會自動強制它位於與文本段不同的頁面中)。有了這條線索,您應該能夠找到更多資訊,例如 John Levine 在Linkers and Loaders中的解釋。