我有一個C程序(出於很好的理由)分配內存,將一些代碼複製到它,使用mprotect()賦予其執行權限,然後調用該代碼。 是的,我知道這是不可移植和不安全的,但有一個很好的理由。 無論如何,我需要通過彙編代碼(使用si命令)單步執行gdb,但它不會讓我 - 它一直說: 「沒有函數包含所選幀的程序計數器」如何強制GDB執行沒有符號的代碼
Is there一種強制gdb執行此代碼的方法?是否有另一個調試器,我應該使用這種類型的東西?
謝謝!
我有一個C程序(出於很好的理由)分配內存,將一些代碼複製到它,使用mprotect()賦予其執行權限,然後調用該代碼。 是的,我知道這是不可移植和不安全的,但有一個很好的理由。 無論如何,我需要通過彙編代碼(使用si命令)單步執行gdb,但它不會讓我 - 它一直說: 「沒有函數包含所選幀的程序計數器」如何強制GDB執行沒有符號的代碼
Is there一種強制gdb執行此代碼的方法?是否有另一個調試器,我應該使用這種類型的東西?
謝謝!
好像你想要add-symbol-file', or
add-symbol-file-from-memory命令 讓gdb知道已經複製到那個存儲位置的代碼。
stepi
命令本身不需要任何符號,應該在你描述的場景中工作就好了(雖然我沒有真正檢查它是否確實)。
是你的問題真的與stepi
?顯示調試會話的相關部分可能會打開您的問題以獲得更好的答案。
您應該能夠在開始到si
/stepi
之前使用display/i $pc
來關注您的代碼。這告訴它在每次打印提示之前顯示當前指令的反彙編。