IDiaImageData
기본 위치 및 메모리 오프셋 모듈 또는 이미지의 세부 정보를 제공합니다.
IDiaImageData : IUnknown
메서드에서 Vtable 순서
다음 표에서 메서드를 IDiaImageData.
메서드 |
설명 |
---|---|
가상 메모리 모듈이 응용 프로그램에 상대적인 위치를 검색합니다. |
|
가상 메모리에서 이미지의 위치를 검색합니다. |
|
이미지를 기반으로 해야 합니다 메모리 위치를 검색 합니다. |
설명
일부 디버그 스트림을 (XDATA, PDATA) 또한 이미지에 저장 된 데이터의 복사본을 포함 합니다.이러한 개체를 쿼리할 수 있는 데이터를 스트리밍하는 IDiaImageData 인터페이스입니다.자세한 내용은이 항목의 "호출자에 대 한 참고 사항" 단원을 참조 하십시오.
호출자에 대 한 참고 사항
이 인터페이스를 호출 하 여 얻을 QueryInterface 에 있는 IDiaEnumDebugStreamData 개체입니다.참고 모두 디버그 스트림을 지원의 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