首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Linux上禁用二进制文件的地址空间随机化?

如何在Linux上禁用二进制文件的地址空间随机化?
EN

Stack Overflow用户
提问于 2009-09-21 18:02:25
回答 3查看 11.7K关注 0票数 17

我正在为并行程序开发一个运行时系统,该系统可以利用跨多个进程的公共地址空间布局,可能分布在几个(数千)个节点上。很多时候,为这种环境构建的软件在默认情况下启用了地址空间随机化的Linux系统上运行,用户可能不希望或无法在系统范围内禁用它(通过sysctl -w kernel.randomize_va_space=0等)。这对并行程序施加了一些限制,并且可能会损害性能。因此,我们需要弄清楚如何为我们构建的二进制文件禁用它。安全性不是问题,因为此软件始终在受控环境中运行。

我找到了对各种标志和变量的引用,比如ET_EXECEF_AS_NO_RANDOM (显然从来没有合并过?)和PF_RANDOMIZE,但是我找不到任何描述如何设置这些标志的文档。理想的答案是告诉我哪个编译器/汇编器/链接器标志将禁用生成的二进制文件的随机化,以及工具链/内核的哪个版本可以工作。下一个最好的工具是在构建二进制文件后执行相同的操作。

因为我确信有人会建议这样做,我已经意识到我们可以在运行时使用setarch -R进行此更改,但最好将其记录在可执行文件中。

看起来paxctl -rx应该可以做到这一点,但它似乎不适用于不包含PaX补丁的内核中使用的当前方法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-22 15:02:20

假设您有某种守护进程,它调用节点上的并行程序。如果是这样,您可以让这个公共父进程为它创建的任何子进程禁用ASLR。

查看GDB源代码(7.0或CVS Head)了解如何做到这一点。它的要点是在fork之后、exec之前调用personality(orig_personality|ADDR_NO_RANDOMIZE)

票数 14
EN

Stack Overflow用户

发布于 2009-09-21 18:09:25

您不能映射shared memory空间或使用命名FIFO有什么原因吗

票数 1
EN

Stack Overflow用户

发布于 2009-09-21 18:12:07

至少是Linux内核preserved offsets when forking中的ASLR的一些早期版本。而不是禁用进程的随机化,您是否可以简单地将它们安排在父/子进程层次结构下,以保持同一父进程派生的二进制实例之间的偏移量相同?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1455904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档