作者yshihyu (yshihyu)
看板LinuxDev
標題[問題] ldd 顯示的so address 會不斷改變
時間Fri Dec 30 20:43:58 2016
$ ldd test
linux-vdso.so.1 => (0x00007ffc0c6c3000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f93bf5e8000)
/lib64/ld-linux-x86-64.so.2 (0x00005589d05de000)
$ ldd test
linux-vdso.so.1 => (0x00007ffdfa65f000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe698a48000)
/lib64/ld-linux-x86-64.so.2 (0x000055a763d1a000)
我寫一個hello world 執行檔用ldd
網路上查到因為動態鏈接的庫,每次的加載地址都不一樣。
那我好奇因為 libc.so.6 是共用函數庫, user space 程式都用到libc.so
這樣每個user space 程式的 libc.so 的 address是都不一樣嘛?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 175.182.129.155
※ 文章網址: https://www.ptt.cc/bbs/LinuxDev/M.1483101841.A.14E.html
推 soheadsome: ALSR 12/31 14:12
推 b0920075: 你每次重開這程式,共用函式庫的位子也都不一樣,因為地 01/02 19:07
→ b0920075: 址隨機化的關係(aslr) 01/02 19:07
→ b0920075: 而且我記得ldd出來的位址不是真的位址 01/02 19:08
→ CP64: 剛剛試了一下, ldd 就只是讓程式吐出執行期間的定址而已 01/03 13:59
→ CP64: 所以基本上就是 alsr 的效果 01/03 14:00
→ yshihyu: 程式執行定址是指 ldd execute file 的執行檔案執行期間 01/04 22:48
→ yshihyu: 如果是 libc.so 它位址範圍是多少? 01/04 22:52
→ yshihyu: 另外一個問題是執行ldd execute file, 是相當執行那個執 01/04 22:53
→ yshihyu: 檔案嘛? 01/04 22:53
推 pttuser: 記得沒錯,程式設計師的自我修養有說到這塊? 01/05 19:34
→ CP64: 說細點就是系統會去用 ld.so(名稱依系統而異) 處理動態連結 01/05 20:24
→ CP64: ldd 做的事就是下一個環境變數讓 ld.so 在載入並定址後吐出 01/05 20:25
→ CP64: 載入的 library 以及他在程式的記憶體空間裡的位址 01/05 20:25