[英]Debugging a DLL injected into a program using GDB
我有 2 個程序和一個 DLL。
loader.exe
啟動main.exe
並在lib.dll
的 memory 空間中注入main.exe
。 main.exe
在某一時刻然后執行 lib.dll 的lib.dll
。 加載程序和 DLL 都已在啟用調試符號的情況下編譯。
我曾嘗試在 DLL 上運行 GDB 並在相關的 function 處設置斷點,但我懷疑這是你的做法,因為當我運行加載程序時沒有任何反應。 我無法調試loader.exe
,因為它所做的只是啟動主程序,注入 DLL,然后退出。 那么我能做什么呢?
請記住,我正在使用 MinGW32 在 Windows 中執行所有這些操作。
我通過更改啟動程序的工作方式解決了這個問題:它在暫停的 state 中啟動目標程序並注入 DLL,然后恢復啟動程序。
為了在目標程序中調試注入的 DLL 函數,我首先使用 GDB 調試啟動程序,並在啟動目標程序后設置斷點並注入 DLL,但在它之前恢復。
然后,我打開另一個 GDB 實例並運行它而不針對任何目標,而是使用attach
將 GDB 附加到已經啟動但仍然暫停的目標程序實例。
由於 DLL 現在已加載到地址空間中,因此我可以對目標程序中的任何 DLL 函數進行斷點。 通過繼續原來的GDB實例調試啟動程序,然后解除掛起目標程序,使其正常運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.