2012-09-25 56 views
0

我試圖將代碼注入使用GDB正在運行的進程和我得到一個SIGSEGV每次我嘗試運行我的代碼。我在Ubuntu(Oneiric)上。我使用python腳本將代碼導出到環境變量中,然後從gdb中找到所需的代碼,如x/50s *((char**)environ),然後選擇更好的地址來查看指令。跳轉到GDB的內存會導致SIGSEGV

所以,當我做x/30i *(addressOfCode),組裝說明有一個EXACT匹配與我想運行的。所以,如果我在我的代碼的起始位置插入一個斷點,跳到那裏,stepi,我得到一個段錯誤。此外,如果我在記憶中選擇一個位置並插入一些NOP,請在其中一個位置跳轉,跳到它,然後stepi,我也會遇到段錯誤。

我該如何避免這種情況?我是否因爲跳出指定內存而進行了分割?我有什麼選擇來解決這個問題?

感謝您的幫助!

回答

0

我是否因爲跳出指定內存而導致進程被隔離?

我不能告訴是什麼意思上述表示的。沒有「指定的過程記憶」這樣的東西。

最有可能的是,你得到SIGSEGV,因爲你沒有可執行堆棧(和Linux上的環境變量,並且許多其他UNIX變體在堆棧上傳遞)。

如果你是在Linux上,嘗試用gcc main.c ... -Wl,-z,execstack鏈接。如果這使得你的代碼注入工作,那麼非可執行的堆棧確實是你的問題。