Caricamento di un modulo di simboli
Se un'applicazione non chiama la funzione SymInitialize con il parametro fInvadeProcess impostato su TRUE, deve caricare i simboli per un modulo quando sono necessari. Per caricare un modulo di simboli su richiesta, l'applicazione può chiamare la funzione SymLoadModuleEx con un percorso completo a un nome di modulo. Quando il modulo viene caricato, il gestore dei simboli caricherà immediatamente i simboli o differirà il carico, a seconda delle opzioni impostate usando la funzione SymSetOptions.
Il codice seguente carica un modulo simbolo. Si noti che presuppone che il gestore dei simboli sia stato inizializzato usando il codice in Inizializzazione del gestore simboli.
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);
}
Si noti che szImageName può essere un percorso a qualsiasi modulo eseguibile con informazioni di debug (.exe, .dll, .drv, .sys, .scr, .cpl, .com). DwBaseAddr è anche l'indirizzo di base del modulo di simboli da caricare. Se questo valore è 0, il gestore dei simboli otterrà l'indirizzo di base dal modulo di simboli specificato.
Argomenti correlati