IDiaImageData
모듈 또는 이미지의 기본 위치 및 메모리 오프셋에 대한 세부 정보를 표시합니다.
구문
IDiaImageData : IUnknown
Vtable 순서의 메서드
다음 표에서는 IDiaImageData
메서드를 보여 줍니다.
메서드 | 설명 |
---|---|
IDiaImageData::get_relativeVirtualAddress | 애플리케이션을 기준으로 모듈의 가상 메모리에서 위치를 검색합니다. |
IDiaImageData::get_virtualAddress | 이미지의 가상 메모리에서 위치를 검색합니다. |
IDiaImageData::get_imageBase | 이미지를 베이스로 하는 메모리 위치를 검색합니다. |
설명
일부 디버그 스트림(.XDATA, .PDATA)은 이미지에 저장된 데이터의 복사본도 포함합니다. 이러한 스트림 데이터 개체는 IDiaImageData
인터페이스에 대해 쿼리할 수 있습니다. 자세한 내용은 이 항목의 “호출자 참고 사항” 섹션을 참조하세요.
호출자 참고 사항
IDiaEnumDebugStreamData 개체에 QueryInterface
를 호출하여 이 인터페이스를 가져옵니다. 모든 디버그 스트림이 IDiaImageData
인터페이스를 지원하는 것은 아닙니다. 예를 들어 현재 XDATA 및 PDATA 스트림만 IDiaImageData
인터페이스를 지원합니다.
예시
이 예제에서는 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