如何随机化Linux ELF的每个部分

如何随机化Linux ELF的每个部分,linux,elf,aslr,Linux,Elf,Aslr,我们知道,我们可以通过将代码编译为饼图来随机化代码、数据/堆栈/堆。而代码和数据在每次加载时总是有一个固定的偏移量 有没有一种方法可以通过添加一些编译/链接标志来设置代码/数据偏移量的随机值?ASLR随机化算法总是这样,因此在加载时没有实际的能力更改此值 如果要在编译时调整地址,可以尝试更改函数地址对齐方式(例如,使用-falign functions=…);但是,您将在代码中留下窗口,这些窗口可以用作蹦床位置 这些偏移量在ELF节数据中定义,因此更改偏移量将涉及在到达链接器之前更改这些值,例如

我们知道,我们可以通过将代码编译为饼图来随机化代码、数据/堆栈/堆。而代码和数据在每次加载时总是有一个固定的偏移量


有没有一种方法可以通过添加一些编译/链接标志来设置代码/数据偏移量的随机值?

ASLR随机化算法总是这样,因此在加载时没有实际的能力更改此值

如果要在编译时调整地址,可以尝试更改函数地址对齐方式(例如,使用
-falign functions=…
);但是,您将在代码中留下窗口,这些窗口可以用作蹦床位置

这些偏移量在ELF节数据中定义,因此更改偏移量将涉及在到达链接器之前更改这些值,例如,通过修改链接脚本

如果您通过-Wl,-verbose,您将获得用于生成二进制文件的链接器脚本的转储,并且您可以对该脚本进行调整-如果您编译的是
饼图
文件,而不是常规二进制文件,则情况会有所不同

我不知道有什么方便的标志可以让你改变线段的偏移量。使用
-Ttext
选项将禁用代码段的ASLR,这与您想要的正好相反

请注意,这似乎表明可以编写工具来执行此操作,而不会有太多困难

评论时间太长,可能不是你想要的答案