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é.
Rubriques connexes