IDiaImageData
Expone los detalles de la ubicación base y los desplazamientos de memoria del módulo o la imagen.
Syntax
IDiaImageData : IUnknown
Métodos en orden de Vtable
En la tabla siguiente se muestran los métodos de IDiaImageData
.
Método | Descripción |
---|---|
IDiaImageData::get_relativeVirtualAddress | Recupera la ubicación en la memoria virtual del módulo que hace referencia a la aplicación. |
IDiaImageData::get_virtualAddress | Recupera la ubicación en la memoria virtual de la imagen. |
IDiaImageData::get_imageBase | Recupera la ubicación de la memoria en la que se debe basar la imagen. |
Comentarios
Algunos flujos de depuración (XDATA, PDATA) contienen copias de datos que también se almacenan en la imagen. Estos objetos de datos de flujo se pueden consultar para la interfaz IDiaImageData
. Consulte la sección "Notas para autores de la llamada" de este tema para obtener más información.
Notas para autores de la llamada
Obtenga esta interfaz llamando a QueryInterface
en un objeto IDiaEnumDebugStreamData. Tenga en cuenta que no todos los flujos de depuración admiten la interfaz IDiaImageData
. Por ejemplo, actualmente solo los flujos XDATA y PDATA admiten la interfaz IDiaImageData
.
Ejemplo
En este ejemplo se busca en todas las secuencias de depuración cualquier flujo que admita la interfaz IDiaImageData
. Si se encuentra dicha secuencia, se muestra alguna información sobre esa secuencia.
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
Encabezado: Dia2.h
Biblioteca: diaguids.lib
DLL: msdia80.dll