在 ELF 可執行檔案中,我用零值位元組重寫了所有部分名稱。即使這樣,檔案也可以正確鏈接和執行。作業系統如何識別檔案中的符號表等各個部分?我的印象是部分名稱用于此目的。一個相關的問題是節名有什么用呢?
uj5u.com熱心網友回復:
我重寫了所有的部分名稱......
...檔案可以正確鏈接...。
與 32 位 Windows 中使用的目標檔案不同,如果不使用鏈接描述檔案,ELF 目標檔案中的部分名稱將被忽略。
每個“PROGBITS”部分包含指定該部分是否可寫、可執行和/或甚至不是映像的一部分的標志(除錯資訊)。
(實際上,Windows使用的目標檔案也有這樣的標志,但它們通常設定為0,并且段名用于區分代碼段和資料段。)
對于其他節型別(例如符號表),無論如何必須如何處理它們是很清楚的。
...檔案可以...正確執行。
對于可執行檔案和共享庫,這些部分無論如何都會被忽略。而是使用檔案的“程式頭”。
“程式頭”告訴作業系統必須將檔案中的某個地址范圍加載到記憶體中。一個“程式頭”可能涵蓋多個部分。并且“程式標題”沒有名稱。
例子:
Sections:
Name Address Offset in file Length
.text 0x10100 0x100 0x30 read-only
.rodata 0x10130 0x130 0x20 read-only
.data 0x20250 0x150 0x10 read-write
.sdata 0x20260 0x160 0x10 read-write
Program headers:
Address Offset in file Length
0x10100 0x100 0x50 read-only
0x20250 0x150 0x20 read-write
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/432866.html
上一篇:C作為外部程式啟動守護行程?
下一篇:比較兩個檔案并根據條件輸出結果
