動態連結過程,動態連結

來源:互聯網
上載者:User

動態連結過程,動態連結

  最近學習了elf檔案的格式,重點關注了動態連結過程中的使用到的section

  第一步程式在載入時,會把解譯器程式加入到.interp段。可以解決動態庫和可執行檔的載入。

  一般來講程式的載入方式是懶啟動,Lazy;除非指定了LD_BIND_NOW環境變數非0,那麼在程式啟動時就會把外部符號地址全部載入完成。

  當遇到還未載入的符號時,比如printf,出在libc中。

  首先程式會到call plt段中的某個地址,這裡只是一個跳轉,如:

   調用malloc

  0x080484d8 <+24>:    e8 63 fe ff ff  call   0x8048340 <malloc@plt>

  此處是跳轉到*0x804a004中的內容指定的地址,這個指標地址是處於.got.plt段的,如果是第一次調用,那麼.got.plt表中儲存的是0x8048346,就是plt段的下一句話,這時候會壓入一個offset,這個8,這個8是這個符號在所對應的重定位表中的位移量,找到重定位表中的這個符號,這個符號有一個32位的標誌,裡面有符號表中的資訊,接著找到符號表中的符號。以上這些從重定位表開始的操作都應該是由ld這個庫裡面的函數裡完成的。

  0x08048340 <+0>: jmp *0x804a004
  0x08048346 <+6>: push $0x8
  0x0804834b <+11>: jmp 0x8048320

  實際上這個位移量8對應的就是地址0x804a004,ld將會找到正確的地址賦給指標0x804a004。

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.