我試圖將代碼注入使用GDB正在運行的進程和我得到一個SIGSEGV每次我嘗試運行我的代碼。我在Ubuntu(Oneiric)上。我使用python腳本將代碼導出到環境變量中,然後從gdb中找到所需的代碼,如x/50s *((char**)environ)
,然後選擇更好的地址來查看指令。跳轉到GDB的內存會導致SIGSEGV
所以,當我做x/30i *(addressOfCode)
,組裝說明有一個EXACT匹配與我想運行的。所以,如果我在我的代碼的起始位置插入一個斷點,跳到那裏,stepi,我得到一個段錯誤。此外,如果我在記憶中選擇一個位置並插入一些NOP,請在其中一個位置跳轉,跳到它,然後stepi,我也會遇到段錯誤。
我該如何避免這種情況?我是否因爲跳出指定內存而進行了分割?我有什麼選擇來解決這個問題?
感謝您的幫助!