シンボル モジュールの読み込み
アプリケーションが fInvadeProcess パラメーターを TRUE に設定して SymInitialize 関数を呼び出さない場合、必要なときにモジュールのシンボルを読み込む必要があります。 必要に応じてシンボル モジュールを読み込むには、アプリケーションはモジュール名への完全なパスを持つ SymLoadModuleEx 関数を呼び出すことができます。 モジュールが読み込まれると、シンボル ハンドラーは、SymSetOptions 関数を使用して設定されたオプションに応じて、シンボルを直ちに読み込むか、読み込みを延期します。
次のコードは、シンボル モジュールを読み込みます。 なお、この例では、「シンボル ハンドラーの初期化」のコード を使用してシンボル ハンドラーを初期化していることを前提としています。
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);
}
szImageName には、デバッグ情報 (.exe、.dll、.drv、.sys、.scr、.cpl、.com) を持つ任意の実行可能モジュールへのパスを指定できます。 また、dwBaseAddr は、読み込まれるシンボル モジュールのベース アドレスです。 この値が 0 の場合、シンボル ハンドラーは指定されたシンボル モジュールからベース アドレスを取得します。
関連トピック