Linux
共享對象文件和可重定位文件有什麼區別?
https://linux-audit.com/elf-binaries-on-linux-understanding-and-analysis/ 說
type 欄位告訴我們文件的用途是什麼。有幾種常見的文件類型。
CORE (value 4) DYN (Shared object file), for libraries (value 3) EXEC (Executable file), for binaries (value 2) REL (Relocatable file), before linked into an executable file (value 1)
https://unix.stackexchange.com/a/476157/674顯示核心模組是 REL。為什麼 REL 不是 DYN?
DYN 和 REL 有什麼區別?
謝謝。
請參閱System V ABI,其中包含 ELF 格式的規範。它說
不同對象文件的重定位條目對
r_offset
成員的解釋略有不同。
- 在可重定位文件中,
r_offset
保存一個節偏移量。即重定位節本身描述瞭如何修改文件中的另一個節;重定位偏移量指定第二部分內的儲存單元。- 在執行檔和共享對象文件中,
r_offset
擁有一個虛擬地址。為了使這些文件的重定位條目對動態連結器更有用,節偏移(文件解釋)讓位於虛擬地址(記憶體解釋)。可重定位文件仍然是完全可重定位的,而共享對像在連結過程中更進一步,並且在很大程度上已被重定位。共享對像只有在它們的程式碼與位置無關的情況下才可重定位(例如,它是使用 GCC 的
-fPIC
選項建構的)。核心模組需要可重定位而不與位置無關,因此它們作為可重定位文件提供。