程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> elf文件中的.plt .rel.dyn .rel.plt .got .got.plt的關系,.plt.rel.dyn

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

編輯:關於C語言

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


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

.rel.dyn保存了.got段的開始地址,未證明

.rel.plt保存了重定位表的信息

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

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

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

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

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

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved