2011-06-26 56 views
4

我想使用ptrace在運行進程的堆棧中寫入一段二進制代碼。 但是,這會導致分段故障(信號11)。在最近的Linux上執行進程堆棧中的代碼

我可以確保%eip寄存器存儲指向我想要在堆棧中執行的第一條指令的指針。我想有一些機制可以保護堆棧數據可執行。

那麼,有沒有人知道如何禁用這種保護堆棧。具體來說,我正在嘗試Fedora 15.

非常感謝!


讀完所有回覆之後,我嘗試了execstack,它確實使堆棧可執行代碼成爲可能。謝謝你們!

+0

您擁有ptrace權限。這是因爲你是同一個用戶,還是因爲你是根?你的目標是什麼架構? – Tobu

回答

1

如前所述這是由於NX位。但這是可能的。我知道gcc確實使用它自己作爲trampolines(這是一種解決方法,例如,使嵌套函數的函數指針)。我沒有看過詳細信息,但我會建議看看gcc代碼。在源代碼中搜索特定於體系結構的宏TARGET_ASM_TRAMPOLINE_TEMPLATE,那麼您應該看看它們是如何實現的。

編輯:該宏的快速谷歌,給了我提示:mprotect是用來更改內存頁面的權限。當你生成日期並執行它時也要小心 - 你可能除了刷新指令緩存之外。