我想知道如果系统上的 aslr 关闭,pie 是否会执行任何操作?还是pie依赖于aslr?

2023-12-09

我还想知道 pie 和 aslr 在内存中的作用是什么,据我所知,aslr 随机化 libc 基地址、堆栈和堆的地址。饼图随机化 elf 基数,并使用 .text、.data、.bss、.rodata...

这是正确的还是我理解错了?


PIE 需要与位置无关的代码,这会消耗少量的性能。 (或者在像 32 位 x86 这样不容易支持 PC 相对寻址的 ISA 上,大约有 15%)。看x86-64 Linux 中不再允许使用 32 位绝对地址?.

禁用 ASLR 后,例如当在 GDB 下运行或在系统范围内禁用它时,Linux 选择的基地址为0x0000555555555000映射可执行文件,所以objdump -d相对于文件开头的地址0x4000最终到达该高虚拟地址。

PIE 可执行文件是 ELF 共享对象(就像.so),而不是 ELF“可执行文件”。 ELF 可执行文件在 ELF 标头中具有由链接器设置的基地址,因此可以将绝对地址硬编码到机器代码和数据中,而无需重新定位以进行修复。 (这就是为什么没有办法 ASLR 正确的 ELF 可执行文件,只能是 PIE)。

支持 PIE 的机制最初只是在库中放置一个入口点的有趣技巧。后来人们意识到 ASLR 对于可执行文件中的静态代码/数据可能很有用,因此这种现有的支持成为正式的。 (或者类似的东西;我还没有读过历史。)

但无论如何,ASLR 是enabled通过 PIE,但即使禁用 ASLR,PIE 也是一个东西,如果您想要最一般的非技术描述。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我想知道如果系统上的 aslr 关闭,pie 是否会执行任何操作?还是pie依赖于aslr? 的相关文章

随机推荐