我们知道我们可以通过将代码编译为 PIE 来随机化代码、数据/堆栈/堆。而代码和数据在每次加载时总是有一个固定的偏移量。
有没有办法通过添加一些编译/链接标志我们可以将代码/数据偏移设置为随机值?
ASLR 随机化算法总是四舍五入到页面边界,因此在加载时没有实际的能力来改变它。
如果你想在编译时调整地址,你可以尝试改变函数地址对齐方式(例如使用-falign-functions=...
);但是您会在代码中留下可用作蹦床位置的窗口。
这些偏移量在 ELF 部分数据中定义,因此更改偏移量将涉及在这些值到达链接器之前更改这些值,例如通过修改链接脚本。
如果您传递 -Wl,-verbose,您将获得用于生成二进制文件的链接器脚本的转储,并且您可以对该脚本进行调整 - 如果您编译pie
文件而不是常规二进制文件,情况会有所不同。
我不知道有任何方便的标志可以让您更改段的偏移量。使用该-Ttext
选项会禁用代码段的 ASLR,这与您想要的完全相反。
请注意,链接的论文似乎表明可以编写工具来执行此操作而没有太多困难。
太长的评论,可能不是你正在寻找的答案。