IDiaImageData
モジュールまたはイメージの基本場所とメモリ オフセットの詳細を公開します。
構文
IDiaImageData : IUnknown
Vtable 順序のメソッド
次の表に、IDiaImageData
のメソッドを示します。
メソッド | 説明 |
---|---|
IDiaImageData::get_relativeVirtualAddress | アプリケーションを基準とする、モジュールの仮想メモリ内の場所を取得します。 |
IDiaImageData::get_virtualAddress | イメージの仮想メモリ内の場所を取得します。 |
IDiaImageData::get_imageBase | イメージのベースとなるメモリの場所を取得します。 |
解説
一部のデバッグ ストリーム (XDATA、PDATA) には、イメージに保存されているデータのコピーが含まれています。 これらのストリーム データ オブジェクトに対して、IDiaImageData
インターフェイスのクエリを実行できます。 詳細については、このトピックの「呼び出し元に関する注意事項」を参照してください。
呼び出し元に関する注意事項
このインターフェイスを取得するには、IDiaEnumDebugStreamData オブジェクトに対して QueryInterface
を呼び出します。 すべてのデバッグ ストリームで IDiaImageData
インターフェイスがサポートされているわけではないことに注意してください。 たとえば、現時点で IDiaImageData
インターフェイスをサポートしているのは、XDATA および PDATA ストリームだけです。
例
この例では、すべてのデバッグ ストリームを対象に、IDiaImageData
インターフェイスをサポートするストリームを検索します。 そのようなストリームが見つかった場合は、そのストリームに関する情報が表示されます。
void ShowImageData(IDiaSession *pSession)
{
if (pSession != NULL)
{
CComPtr<IDiaEnumDebugStreams> pStreamsList;
HRESULT hr;
hr = pSession->getEnumDebugStreams(&pStreamsList);
if (SUCCEEDED(hr))
{
LONG numStreams = 0;
hr = pStreamsList->get_Count(&numStreams);
if (SUCCEEDED(hr))
{
ULONG fetched = 0;
for (LONG i = 0; i < numStreams; i++)
{
CComPtr<IDiaEnumDebugStreamData> pStream;
hr = pStreamsList->Next(1,&pStream,&fetched);
if (fetched == 1)
{
CComPtr<IDiaImageData> pImageData;
hr = pStream->QueryInterface(__uuidof(IDiaImageData),
(void **)&pImageData);
if (SUCCEEDED(hr))
{
CComBSTR name;
hr = pStream->get_name(&name);
if (SUCCEEDED(hr))
{
wprintf(L"Stream %s:\n",(BSTR)name);
}
else
{
wprintf(L"Failed to get name of stream\n");
}
ULONGLONG imageBase = 0;
if (pImageData->get_imageBase(&imageBase) == S_OK)
{
wprintf(L" image base = 0x%0I64x\n",imageBase);
}
DWORD relVA = 0;
if (pImageData->get_relativeVirtualAddress(&relVA) == S_OK)
{
wprintf(L" relative virtual address = 0x%08lx\n",relVA);
}
ULONGLONG va = 0;
if (pImageData->get_virtualAddress(&va) == S_OK)
{
wprintf(L" virtual address = 0x%0I64x\n", va);
}
}
}
}
}
}
}
}
要件
ヘッダー: Dia2.h
ライブラリ: diaguids.lib
DLL: msdia80.dll