[问题] 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