ELF學(xué)習(xí)筆記

目標(biāo)文件有三種形式:
1.可重定位目標(biāo)文件,由編譯器產(chǎn)生
2.可執(zhí)行目標(biāo)文件,二進(jìn)制代碼和數(shù)據(jù),可以直接拷貝到內(nèi)存中執(zhí)行,由鏈接器產(chǎn)生
3.共享目標(biāo)文件,特殊的可重定位目標(biāo)文件,可在運行時進(jìn)行鏈接

根據(jù)目標(biāo)文件形式的不同,對elf的解讀不同

ObjFileFmt.epsi.gif

1.對于可重定位文件,由ELF header和sections組成,各個section在文件中的位置由Section Header Table來指定。
2.可執(zhí)行目標(biāo)文件和共享目標(biāo)文件由segments和ELF header組成,segment由sections組成,方便在運行時成塊的加載如虛擬內(nèi)存空間

可重定位目標(biāo)文件##

編譯器在編譯時會將不同可重定位文件的data和text section進(jìn)行合并,并分配虛擬內(nèi)存地址,同時將重定位section中entry分配實際的地址。如果有使用動態(tài)鏈接庫,那么?

可執(zhí)行目標(biāo)文件##

如果有使用動態(tài)鏈接庫,會在加載數(shù)據(jù)和代碼segment之后讀取interpret segment里的dynamic linker(本身也是so,通常為ld.so),將執(zhí)行轉(zhuǎn)交給dynamic linker,dynamic linker會根據(jù)dynamic節(jié)中的needed entry將依賴so都加載到虛擬地址空間中,并進(jìn)行符號重定向。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容