在最近的 Linux 上执行进程堆栈中的代码



我想使用ptrace在运行的进程堆栈中编写一段二进制代码。然而,这会导致分段故障(信号11)。

我可以确保%eip寄存器存储指向我要在堆栈中执行的第一条指令的指针。我想linux有某种机制可以保护堆栈数据的可执行性。

那么,有人知道如何禁用堆栈的这种保护吗。具体来说,我正在试用Fedora 15。

非常感谢!


在阅读了所有回复后,我尝试了execstack,它确实使堆栈中的代码可以执行。谢谢大家!

这可能是由于现代处理器上的NX位。您可以使用execstack为您的程序禁用此功能。

http://advosys.ca/viewpoints/2009/07/disabling-the-nx-bit-for-specific-apps/

http://linux.die.net/man/8/execstack

如前所述,这是由于NX位。但这是可能的。我确信gcc会将其本身用于蹦床(这是一种变通方法,例如制作嵌套函数的函数指针)。我没有查看详细信息,但我建议查看gcc代码。在特定于体系结构的宏TARGET_ASM_TRAMPOLINE_TEMPLATE的源代码中搜索,你应该会看到它们是如何做到的

编辑:快速搜索该宏,给了我提示:mprotect用于更改内存页的权限。生成日期并执行它时也要小心——除了刷新指令缓存之外,您可能还需要这样做。

相关内容

最新更新