作者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://webptt.com/cn.aspx?n=bbs/LinuxDev/M.1483101841.A.14E.html
1F:推 soheadsome: ALSR 12/31 14:12
2F:推 b0920075: 你每次重开这程式,共用函式库的位子也都不一样,因为地 01/02 19:07
3F:→ b0920075: 址随机化的关系(aslr) 01/02 19:07
4F:→ b0920075: 而且我记得ldd出来的位址不是真的位址 01/02 19:08
5F:→ CP64: 刚刚试了一下, ldd 就只是让程式吐出执行期间的定址而已 01/03 13:59
6F:→ CP64: 所以基本上就是 alsr 的效果 01/03 14:00
7F:→ yshihyu: 程式执行定址是指 ldd execute file 的执行档案执行期间 01/04 22:48
8F:→ yshihyu: 如果是 libc.so 它位址范围是多少? 01/04 22:52
9F:→ yshihyu: 另外一个问题是执行ldd execute file, 是相当执行那个执 01/04 22:53
10F:→ yshihyu: 档案嘛? 01/04 22:53
11F:推 pttuser: 记得没错,程式设计师的自我修养有说到这块? 01/05 19:34
12F:→ CP64: 说细点就是系统会去用 ld.so(名称依系统而异) 处理动态连结 01/05 20:24
13F:→ CP64: ldd 做的事就是下一个环境变数让 ld.so 在载入并定址後吐出 01/05 20:25
14F:→ CP64: 载入的 library 以及他在程式的记忆体空间里的位址 01/05 20:25