다음을 통해 공유


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

참고 항목