Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mengekspos detail lokasi dasar dan offset memori dari modul atau gambar.
Sintaks
IDiaImageData : IUnknown
Metode dalam Urutan Vtable
Tabel berikut memperlihatkan metode IDiaImageData.
| Metode | Deskripsi |
|---|---|
| IDiaImageData::get_relativeVirtualAddress | Mengambil lokasi dalam memori virtual modul relatif terhadap aplikasi. |
| IDiaImageData::get_virtualAddress | Mengambil lokasi dalam memori virtual gambar. |
| IDiaImageData::get_imageBase | Mengambil lokasi memori tempat gambar harus didasarkan. |
Keterangan
Beberapa aliran debug (XDATA, PDATA) berisi salinan data yang juga disimpan dalam gambar. Objek data aliran ini dapat dikueri untuk IDiaImageData antarmuka. Lihat bagian "Catatan untuk Penelepon" di topik ini untuk detailnya.
Catatan untuk Penelepon
Dapatkan antarmuka ini dengan memanggil QueryInterface objek IDiaEnumDebugStreamData . Perhatikan bahwa tidak semua aliran debug mendukung IDiaImageData antarmuka. Misalnya, saat ini hanya aliran XDATA dan PDATA yang mendukung IDiaImageData antarmuka.
Contoh
Contoh ini mencari semua aliran debug untuk aliran apa pun yang mendukung IDiaImageData antarmuka. Jika aliran seperti itu ditemukan, beberapa informasi tentang aliran tersebut ditampilkan.
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);
}
}
}
}
}
}
}
}
Persyaratan
Header: Dia2.h
Library: diaguids.lib
DLL: msdia80.dll