Bagikan melalui


Memuat Modul Simbol

Jika aplikasi tidak memanggil fungsi SymInitialize dengan parameter fInvadeProcess yang diatur ke TRUE, aplikasi harus memuat simbol untuk modul saat diperlukan. Untuk memuat modul simbol sesuai permintaan, aplikasi dapat memanggil fungsi SymLoadModuleEx dengan jalur lengkap ke nama modul. Ketika modul dimuat, handler simbol akan segera memuat simbol atau menunda beban, tergantung pada opsi yang diatur menggunakan fungsi SymSetOptions.

Kode berikut memuat modul simbol. Perhatikan bahwa ia mengasumsikan Anda telah menginisialisasi handler simbol menggunakan kode dalam Menginisialisasi Penangan Simbol.

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

Perhatikan bahwa szImageName dapat menjadi jalur ke modul yang dapat dieksekusi yang memiliki informasi debugging (.exe, .dll, .drv, .sys, .scr, .cpl, .com). Selain itu, dwBaseAddr adalah alamat dasar modul simbol yang akan dimuat. Jika nilai ini adalah 0, penangan simbol akan mendapatkan alamat dasar dari modul simbol yang ditentukan.

Membongkar Modul Simbol