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