IDiaImageData
Expose les détails de l’emplacement de base et des décalages de mémoire du module ou de l’image.
Syntax
IDiaImageData : IUnknown
Méthodes dans l'ordre Vtable
Le tableau suivant présente les méthodes de IDiaImageData
.
Méthode | Description |
---|---|
IDiaImageData::get_relativeVirtualAddress | Récupère l’emplacement dans la mémoire virtuelle du module lié à l’application. |
IDiaImageData::get_virtualAddress | Récupère l’emplacement dans la mémoire virtuelle de l’image. |
IDiaImageData::get_imageBase | Récupère l’emplacement de mémoire où l’image doit être basée. |
Remarques
Certains flux de débogage (XDATA, PDATA) contiennent des copies de données également stockées dans l’image. Ces objets de données de flux peuvent être interrogés pour l’interface IDiaImageData
. Pour plus d’informations, consultez la section « Remarques pour les appelants ».
Remarques pour les appelants
Obtenez cette interface en appelant QueryInterface
ou un objet IDiaEnumDebugStreamData. Notez que tous les flux de débogage ne prennent pas en charge l’interface IDiaImageData
. Par exemple, actuellement, seuls les flux XDATA et PDATA prennent en charge l’interface IDiaImageData
.
Exemple
Cet exemple recherche tous les flux de débogage pour tout flux prenant en charge l’interface IDiaImageData
. Si un tel flux est trouvé, certaines informations sur ce flux sont affichées.
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);
}
}
}
}
}
}
}
}
Configuration requise
En-tête : Dia2.h
Bibliothèque : diaguids.lib
DLL : msdia80.dll