共用方式為


IDiaImageData

公開 (expose) 基底的位置和記憶體位移的模組或映像的詳細資料。

IDiaImageData : IUnknown

方法 Vtable 順序

下表顯示的方法IDiaImageData

方法

描述

IDiaImageData::get_relativeVirtualAddress

擷取虛擬記憶體中的位置,相對於應用程式的模組。

IDiaImageData::get_virtualAddress

擷取虛擬記憶體中之影像的位置。

IDiaImageData::get_imageBase

擷取映像應該進行計算的記憶體位置。

備註

有些偵錯資料流 (XDATA、 PDATA) 包含複本亦儲存映像中的資料。 這些資料流物件,請查詢取得的資料IDiaImageData介面。 請參閱本主題,如需詳細資訊的 「 備忘稿的呼叫端 」 一節。

呼叫者的備忘稿

取得這個介面,藉由呼叫QueryInterfaceIDiaEnumDebugStreamData物件。 請注意,並非所有偵錯資料流處理的支援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

請參閱

參考

IDiaEnumDebugStreamData

其他資源

介面 (偵錯介面存取 SDK)