在調試研討會期間,其中一位參與者無法遵循示例。預期的LdrDoDebuggerBreak(),獲得NtWaitForWorkViaWorkerFactory()
在Windows 10機器上的WinDbg 10.0.15603.137下運行可執行文件時,調試器第一次在NtWaitForWorkViaWorkerFactory()
處破壞,而不是在LdrDoDebuggerBreak()
中的初始斷點。
當試圖用g
運行可執行文件時,它表示沒有可運行的可執行文件。問題是什麼?
這裏是什麼樣子:
應用程序的源代碼很簡單:
#include "stdafx.h"
#include <exception>
int _tmain(int /*argc*/, _TCHAR* /*argv*/[])
{
throw std::exception();
}
注:我幾乎不能提供更多的信息,因爲我沒有更多的訪問客戶的個人電腦,它不會發生在我的。
嗯,它並沒有真正的突破。這是一個關於已經退出的過程的謊言。我不知道發生了什麼,但我可以告訴你你應該做什麼。在創建進程時中斷,而不是在最初的斷點和step/trace/go /從那裏開始。我在這個答案中描述瞭如何做到這一點:https://stackoverflow.com/a/42046071/306930 – conio
@conio:通常,初始斷點對於我想要做的分析已經足夠了。有趣的方法。如果我有機會用你的方法分析這個問題,我可能會發現它在初始斷點之前爲什麼會終止。 –
好吧,當然。我不建議讓它成爲默認行爲。你是對的,通常你不需要它。在ibp之前的流程終止幾乎是您爲什麼需要它的教科書示例。 :) – conio