- 论坛徽章:
- 0
|
>>这里是如何判断出第三个load对应于.dynstr节的?
readelf -l /bin/bash,后面有ph和section的对照表
>>ld动态链接要创建这样一个不能读写执行的区间的目的是什么呢?
可能是系统设计和实现都将load ph放在一起吧,中间放一些检测非法访问的页。通过这个方法,就不需要再具体计算哪些区间空闲,而不能再分配出去了。
你还没搞懂思想,请再看仔细一点
“先计算要加载的load ph的总区间,即第一个load ph的start地址,和最后一个load的结束地址,并一次性mmap,然后再将其区间调整为不能读写执行.再根据每个load ph执行各自的mmap.”
先一次mmap全部空间,在用mprot修改该区间不能访问,然后再加载各个load ph再次mmap,剩下的就是
3bed14d000-3bed34d000 ---p 0014d000 fd:00 945303 /lib64/libc-2.5.so
这个没有被再次mmap,形成空洞了.
>>GNU_RELRO
应该是重定位信息吧
如果你想了解得更多,请查看
内核的binfmt_elf.c中的load_elf_binary函数
glibc中的ld代码
binutils中的readelf代码 |
|