[問題] ldd 顯示的so address 會不斷改變

看板LinuxDev作者 (yshihyu)時間8年前 (2016/12/30 20:44), 編輯推噓3(3011)
留言14則, 5人參與, 最新討論串1/1
$ 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

12/31 14:12, , 1F
ALSR
12/31 14:12, 1F

01/02 19:07, , 2F
你每次重開這程式,共用函式庫的位子也都不一樣,因為地
01/02 19:07, 2F

01/02 19:07, , 3F
址隨機化的關係(aslr)
01/02 19:07, 3F

01/02 19:08, , 4F
而且我記得ldd出來的位址不是真的位址
01/02 19:08, 4F

01/03 13:59, , 5F
剛剛試了一下, ldd 就只是讓程式吐出執行期間的定址而已
01/03 13:59, 5F

01/03 14:00, , 6F
所以基本上就是 alsr 的效果
01/03 14:00, 6F

01/04 22:48, , 7F
程式執行定址是指 ldd execute file 的執行檔案執行期間
01/04 22:48, 7F

01/04 22:52, , 8F
如果是 libc.so 它位址範圍是多少?
01/04 22:52, 8F

01/04 22:53, , 9F
另外一個問題是執行ldd execute file, 是相當執行那個執
01/04 22:53, 9F

01/04 22:53, , 10F
檔案嘛?
01/04 22:53, 10F

01/05 19:34, , 11F
記得沒錯,程式設計師的自我修養有說到這塊?
01/05 19:34, 11F

01/05 20:24, , 12F
說細點就是系統會去用 ld.so(名稱依系統而異) 處理動態連結
01/05 20:24, 12F

01/05 20:25, , 13F
ldd 做的事就是下一個環境變數讓 ld.so 在載入並定址後吐出
01/05 20:25, 13F

01/05 20:25, , 14F
載入的 library 以及他在程式的記憶體空間裡的位址
01/05 20:25, 14F
文章代碼(AID): #1OPbQH5E (LinuxDev)
文章代碼(AID): #1OPbQH5E (LinuxDev)