Condividi tramite


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.

Scaricamento di un modulo di simboli