IDiaImageData
Expõe os detalhes do local base e dos deslocamentos de memória do módulo ou da imagem.
Sintaxe
IDiaImageData : IUnknown
Métodos na ordem VTable
A tabela a seguir mostra os métodos de IDiaImageData
.
Método | Descrição |
---|---|
IDiaImageData::get_relativeVirtualAddress | Recupera o local na memória virtual do módulo em relação ao aplicativo. |
IDiaImageData::get_virtualAddress | Recupera o local na memória virtual da imagem. |
IDiaImageData::get_imageBase | Recupera o local de memória em que a imagem deve ser baseada. |
Comentários
Alguns fluxos de depuração (XDATA, PDATA) contêm cópias de dados também armazenados na imagem. Esses objetos de dados de fluxo podem ser consultados para a interface IDiaImageData
. Consulte a seção "Observações para chamadores" neste tópico para obter detalhes.
Observações para chamadores
Obtenha essa interface chamando QueryInterface
em um objeto IDiaEnumDebugStreamData. Observe que nem todos os fluxos de depuração dão suporte à interface IDiaImageData
. Por exemplo, atualmente, apenas os fluxos XDATA e PDATA dão suporte à interface IDiaImageData
.
Exemplo
Esse exemplo pesquisa todos os fluxos de depuração para qualquer fluxo que dê suporte à interface IDiaImageData
. Se esse fluxo for encontrado, algumas informações sobre esse fluxo serão exibidas.
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);
}
}
}
}
}
}
}
}
Requisitos
Cabeçalho: Dia2.h
Biblioteca: diaguids.lib
DLL: msdia80.dll