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.
Topik terkait