Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Предоставляет сведения о базовом расположении и смещениях памяти модуля или образа.
Синтаксис
IDiaImageData : IUnknown
Методы в порядке таблицы Vtable
В следующей таблице показаны методы IDiaImageData.
| Метод | Description |
|---|---|
| IDiaImageData::get_relativeVirtualAddress | Извлекает расположение в виртуальной памяти модуля относительно приложения. |
| IDiaImageData::get_virtualAddress | Извлекает расположение в виртуальной памяти образа. |
| IDiaImageData::get_imageBase | Извлекает расположение памяти, в котором должен быть основан образ. |
Замечания
Некоторые потоки отладки (XDATA, PDATA) содержат копии данных, которые также хранятся в изображении. Эти объекты потоковых данных можно запрашивать для IDiaImageData интерфейса. Дополнительные сведения см. в разделе "Заметки для вызывающих абонентов".
Заметки для вызывающих абонентов
Получите этот интерфейс, вызвав QueryInterface объект IDiaEnumDebugStreamData . Обратите внимание, что не все потоки отладки поддерживают IDiaImageData интерфейс. Например, в настоящее время поддерживаются только потоки IDiaImageData XDATA и PDATA.
Пример
В этом примере выполняется поиск всех потоков отладки для любого потока, поддерживающего 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);
}
}
}
}
}
}
}
}
Requirements
Заголовок: Dia2.h
Библиотека: diaguids.lib
DLL: msdia80.dll