Udostępnij przez


Ładowanie modułu symboli

Jeśli aplikacja nie wywołuje funkcji SymInitialize z parametrem fInvadeProcess ustawionym na TRUE, musi załadować symbole dla modułu, gdy są one wymagane. Aby załadować moduł symboli na żądanie, aplikacja może wywołać funkcję SymLoadModuleEx z pełną ścieżką do nazwy modułu. Po załadowaniu modułu program obsługi symboli załaduje symbole natychmiast lub odroczy obciążenie, w zależności od opcji ustawionych przy użyciu funkcji SymSetOptions.

Poniższy kod ładuje moduł symboli. Należy pamiętać, że przyjęto założenie, że zainicjowano procedurę obsługi symboli przy użyciu kodu w Inicjowanie programu obsługi symboli.

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

Należy pamiętać, że szImageName może być ścieżką do dowolnego modułu wykonywalnego z informacjami debugowania (.exe, .dll, .drv, .sys, .scr, .cpl, .com). Ponadto dwBaseAddr jest podstawowym adresem modułu symboli, który ma zostać załadowany. Jeśli ta wartość to 0, procedura obsługi symboli uzyska adres podstawowy z określonego modułu symboli.

Zwalnianie Modułu Symboli