IDiaImageData
Expõe os detalhes sobre os deslocamentos de memória e o local de base do módulo ou imagem.
IDiaImageData : IUnknown
Métodos na ordem de Vtable
A tabela a seguir mostra os métodos de IDiaImageData.
Método |
Descrição |
---|---|
Recupera o local na memória virtual do módulo em relação ao aplicativo. |
|
Recupera o local na memória virtual da imagem. |
|
Recupera a posição de memória onde a imagem deve se basear. |
Comentários
Alguns fluxos de depuração (XDATA, PDATA) contêm cópias de dados também são armazenados na imagem. Esses fluxos de dados de objetos podem ser consultados para o IDiaImageData interface. Consulte a seção "Observações para chamadores" neste tópico para obter detalhes.
Observações para chamadores
Obter essa interface chamando QueryInterface em um IDiaEnumDebugStreamData objeto. Observe que nem todos depurar transmite o suporte a IDiaImageData interface. Por exemplo, no momento somente os fluxos XDATA e PDATA oferecem suporte a IDiaImageData interface.
Exemplo
Este exemplo procura todos os fluxos de depuração para qualquer fluxo que ofereça suporte a IDiaImageData interface. Se tal um fluxo for encontrado, algumas informações sobre esse fluxo sã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