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.
Zugehörige Themen