elf文件中的.plt .rel.dyn .rel.plt .got .got.plt的關系


.plt的作用是一個跳板,保存了某個符號在重定位表中的偏移量(用來第一次查找某個符號)和對應的.got.plt的對應的地址

.rel.dyn重定向表,在程序啟動時就需要重定位完成。

.rel.plt保存了重定位表的信息,可以使用lazy的連接方式

.got據說是保存了elf文件本身的各個符號的偏移量,即不要動態鏈接,未證明

.got.plt保存了重定位地址。

比如printf是一個重定位符號,需要連接該符號時過程是這樣:

main函數call  .plt段中的一個地址,這里的第一句話就是調轉到.got.plt中的保存的printf的地址,如果是第一次,那么保存的地址就是.plt中的下一句話,這個下一句話就是壓入這個符號在.rel.plt中的重定位表的偏移量,然后ld程序就會根據重定位表中的信息加上這個偏移量找到這個地址,保存到重定位表所指向的地址中,這個地址其實就是.got.plt段的一個地址。

第二次調用時就可以直接獲取到.got.plt中保存的地址了。

總之,這個設計讓人就覺得很完整,有聯系,6666666


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM