載入符號模組
如果應用程式未呼叫 SymInitialize 函式,並將 fInvadeProcess 參數設定為 TRUE,則必須在需要時載入模組的符號。 若要視需要載入符號模組,應用程式可以使用模組名稱的完整路徑呼叫 SymLoadModuleEx 函式。 載入模組時,符號處理程式會立即載入符號或延遲載入,視使用 SymSetOptions 函 式設定的選項而定。
下列程式代碼會載入符號模組。 請注意,假設您已使用初始化符號處理程式中的 程式代碼來初始化符號處理程式。
TCHAR szImageName[MAX_PATH] = TEXT("foo.dll");
DWORD64 dwBaseAddr = 0;
if (SymLoadModuleEx(hProcess, // target process
NULL, // handle to image - not used
szImageName, // name of image file
NULL, // name of module - not required
dwBaseAddr, // base address - not required
0, // size of image - not required
NULL, // MODLOAD_DATA used for special cases
0)) // flags - not required
{
// SymLoadModuleEx returned success
}
else
{
// SymLoadModuleEx failed
DWORD error = GetLastError();
printf("SymLoadModuleEx returned error : %d\n", error);
}
請注意, szImageName 可以是具有偵錯資訊的任何可執行模組路徑(.exe、.dll、.drv、.sys、.scr、.cpl、.com)。 此外, dwBaseAddr 是要載入之符號模組的基位址。 如果此值為 0,符號處理程式會從指定的符號模組取得基位址。
相關主題