載入符號模組

如果應用程式未呼叫 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,符號處理程式會從指定的符號模組取得基位址。

卸除符號模組