Chargement d’un module symbole

Si une application n’appelle pas la fonction SymInitialize avec le paramètre fInvadeProcess défini sur TRUE, elle doit charger les symboles d’un module lorsqu’ils sont requis. Pour charger un module de symbole à la demande, l’application peut appeler la fonction SymLoadModuleEx avec un chemin d’accès complet à un nom de module. Lorsque le module est chargé, le gestionnaire de symboles charge les symboles immédiatement ou reporte la charge, en fonction des options définies à l’aide de la fonction SymSetOptions .

Le code suivant charge un module de symbole. Notez que cela suppose que vous avez initialisé le gestionnaire de symboles à l’aide du code dans Initialisation du gestionnaire de symboles.

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

Notez que szImageName peut être un chemin d’accès à n’importe quel module exécutable contenant des informations de débogage (.exe, .dll, .drv, .sys, .scr, .cpl, .com). En outre, dwBaseAddr est l’adresse de base du module de symbole à charger. Si cette valeur est 0, le gestionnaire de symboles obtient l’adresse de base à partir du module de symbole spécifié.

Déchargement d’un module symbole