2011-06-26 58 views
4

我想使用ptrace在运行进程的堆栈中写入一段二进制代码。 但是,这会导致分段故障(信号11)。在最近的Linux上执行进程堆栈中的代码

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

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

非常感谢!


读完所有回复之后,我尝试了execstack,它确实使堆栈可执行代码成为可能。谢谢你们!

+0

您拥有ptrace权限。这是因为你是同一个用户,还是因为你是根?你的目标是什么架构? – Tobu

回答

1

如前所述这是由于NX位。但这是可能的。我知道gcc确实使用它自己作为trampolines(这是一种解决方法,例如,使嵌套函数的函数指针)。我没有看过详细信息,但我会建议看看gcc代码。在源代码中搜索特定于体系结构的宏TARGET_ASM_TRAMPOLINE_TEMPLATE,那么您应该看看它们是如何实现的。

编辑:该宏的快速谷歌,给了我提示:mprotect是用来更改内存页面的权限。当你生成日期并执行它时也要小心 - 你可能除了刷新指令缓存之外。