Freigeben über


Laden eines Symbolmoduls

Wenn eine Anwendung die SymInitialize-Funktion nicht aufruft und der fInvadeProcess-Parameter auf TRUE festgelegt ist, muss sie Symbole für ein Modul laden, wenn sie erforderlich sind. Um ein Symbolmodul bei Bedarf zu laden, kann die Anwendung die SymLoadModuleEx-Funktion mit einem vollständigen Pfad zu einem Modulnamen aufrufen. Wenn das Modul geladen wird, lädt der Symbolhandler die Symbole entweder sofort oder verschiebt die Last, abhängig von den mit der SymSetOptions-Funktion festgelegten Optionen.

Der folgende Code lädt ein Symbolmodul. Beachten Sie, dass davon ausgegangen wird, dass Sie den Symbolhandler mithilfe des Codes in Initializing the Symbol Handler initialisiert haben.

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);
}

Beachten Sie, dass szImageName ein Pfad zu jedem ausführbaren Modul sein kann, das Debuginformationen enthält (.exe, .dll, .drv, .sys, .scr, .cpl, .com). Außerdem ist dwBaseAddr die Basisadresse des zu ladenden Symbolmoduls. Wenn dieser Wert 0 ist, ruft der Symbolhandler die Basisadresse aus dem angegebenen Symbolmodul ab.

Entladen eines Symbolmoduls