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

作者: yshihyu (yshihyu)   2016-12-30 20:43:58
$ 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是都不一樣嘛?
謝謝
作者: b0920075 (Void)   2015-01-02 19:07:00
你每次重開這程式,共用函式庫的位子也都不一樣,因為地址隨機化的關係(aslr)而且我記得ldd出來的位址不是真的位址
作者: CP64 (( ̄▽ ̄#)﹏﹏)   2015-01-03 13:59:00
剛剛試了一下, ldd 就只是讓程式吐出執行期間的定址而已所以基本上就是 alsr 的效果
作者: yshihyu (yshihyu)   2015-01-04 22:48:00
程式執行定址是指 ldd execute file 的執行檔案執行期間如果是 libc.so 它位址範圍是多少?另外一個問題是執行ldd execute file, 是相當執行那個執檔案嘛?
作者: pttuser (pttuser)   2015-01-05 19:34:00
記得沒錯,程式設計師的自我修養有說到這塊?
作者: CP64 (( ̄▽ ̄#)﹏﹏)   2015-01-05 20:24:00
說細點就是系統會去用 ld.so(名稱依系統而異) 處理動態連結ldd 做的事就是下一個環境變數讓 ld.so 在載入並定址後吐出載入的 library 以及他在程式的記憶體空間裡的位址
作者: soheadsome (師大狗鼻哥)   2016-12-31 14:12:00
ALSR

Links booklink

Contact Us: admin [ a t ] ucptt.com