Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Linux上禁用二进制文件的地址空间随机化?_Linux_Gcc_Aslr_Heap Randomization - Fatal编程技术网

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

如何在Linux上禁用二进制文件的地址空间随机化?,linux,gcc,aslr,heap-randomization,Linux,Gcc,Aslr,Heap Randomization,我正在为并行程序开发一个运行时系统,它可以利用跨多个进程的公共地址空间布局,可能分布在数千个节点上。很多时候,为该环境构建的软件在默认情况下启用了地址空间随机化的Linux系统上运行,用户可能不希望或无法在系统范围内禁用它(通过sysctl-w kernel.randomize_va_space=0等)。这对并行程序施加了一些限制,并可能影响性能。因此,我们想知道如何为我们构建的二进制文件禁用它。安全性不是问题,因为此软件始终在受控环境中运行 我找到了对各种标志和变量的引用,如ET_EXEC,E

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

我找到了对各种标志和变量的引用,如
ET_EXEC
EF_AS_NO_RANDOM
(显然从未合并?)和
PF_RANDOMIZE
,但我找不到任何文档描述我可以如何设置这些标志。一个理想的答案是告诉我哪个编译器/汇编器/链接器标志将禁用结果二进制文件的随机化,以及它所使用的工具链/内核的版本。下一个最好的方法是在构建二进制文件后使用同样的工具

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


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

是否有某些原因导致您不能在Linux内核中映射空间或使用命名的?

至少是一些早期版本的ASLR。与禁用进程的随机化不同,您是否可以简单地将它们安排在父/子进程层次结构下,以保持由同一父级分叉的二进制实例之间的偏移量相同?

假定您有某种守护进程,可以调用节点上的并行程序。如果是这样,您可以使此公共父进程对其创建的任何子进程禁用ASLR


查看GDB源代码(7.0或CVS Head)以了解如何做到这一点。它的要点是在
fork
之后和
exec
之前调用
personality(orig|u personality | ADDR_NO|u RANDOMIZE)
不,我们不能,因为这些进程运行在多个节点上。当我们不必通过跳转来手动同步地址空间时,线程迁移就容易多了。我们正在跨多个节点运行。我将立即调查并尝试此操作。