【问题标题】:How to randomize each segment of Linux ELF如何随机化 Linux ELF 的每个段
【发布时间】:2015-02-16 15:47:36
【问题描述】:

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

有没有办法通过添加一些编译/链接标志我们可以将代码/数据偏移设置为随机值?

【问题讨论】:

    标签: linux elf aslr


    【解决方案1】:

    ASLR 随机化算法始终为rounds to the page boundary,因此在加载时无法更改它。

    如果你想在编译时调整地址,你可以尝试改变函数地址对齐方式(例如使用-falign-functions=...);但是您会在代码中留下可用作蹦床位置的窗口。

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

    如果您传递 -Wl,-verbose,您将获得用于生成二进制文件的链接器脚本的转储,您可以对该脚本进行调整 - 如果您编译 pie 文件而不是一个常规的二进制文件。

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

    请注意,the linked paper 似乎表明可以编写工具来执行此操作而 没有太多困难。

    评论太长,可能不是您要寻找的答案。

    【讨论】:

      猜你喜欢
      • 2011-06-23
      • 2015-09-03
      • 2016-01-09
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      • 2019-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多