IDiaSegment
Mapuje data z čísla oddílu na segmenty adresního prostoru.
Syntaxe
IDiaSegment : IUnknown
Metody v pořadí Vtable
Následující tabulka ukazuje metody IDiaSegment
.
metoda | Popis |
---|---|
IDiaSegment::get_frame | Načte číslo segmentu. |
IDiaSegment::get_offset | Načte posun v segmentech, kde začíná oddíl. |
IDiaSegment::get_length | Načte počet bajtů v segmentu. |
IDiaSegment::get_read | Načte příznak, který označuje, jestli je možné segment přečíst. |
IDiaSegment::get_write | Načte příznak, který označuje, jestli je možné segment upravit. |
IDiaSegment::get_execute | Načte příznak, který označuje, jestli je segment spustitelný. |
IDiaSegment::get_addressSection | Načte číslo oddílu, které se mapuje na tento segment. |
IDiaSegment::get_relativeVirtualAddress | Načte relativní virtuální adresu (RVA) na začátku oddílu. |
IDiaSegment::get_virtualAddress | Načte virtuální adresu (VA) začátku oddílu. |
Poznámky
Vzhledem k tomu, že sada SDK pro přístup k rozhraní ladění (DIA) již provádí překlady z posunu oddílu na relativní virtuální adresy, většina aplikací nebude využívat informace v mapě segmentů.
Poznámky pro volající
Získejte toto rozhraní voláním IDiaEnumSegments::Item nebo IDiaEnumSegments::Next metody. Podrobnosti najdete v příkladu.
Příklad
Tato funkce zobrazí adresu všech segmentů v tabulce a nejbližší symbol.
void ShowSegments(IDiaTable *pTable, IDiaSession *pSession)
{
CComPtr<IDiaEnumSegments> pSegments;
if ( SUCCEEDED( pTable->QueryInterface(
_uuidof( IDiaEnumSegments ),
(void**)&pSegments )
)
)
{
CComPtr<IDiaSegment> pSegment;
while ( SUCCEEDED( hr = pSegments->Next( 1, &pSegment, &celt ) ) &&
celt == 1 )
{
DWORD rva;
DWORD seg;
pSegment->get_addressSection( &seg );
if ( pSegment->get_relativeVirtualAddress( &rva ) == S_OK )
{
printf( "Segment %i addr: 0x%.8X\n", seg, rva );
pSegment = NULL;
CComPtr<IDiaSymbol> pSym;
if ( psession->findSymbolByRVA( rva, SymTagNull, &pSym ) == S_OK )
{
CDiaBSTR name;
DWORD tag;
pSym->get_symTag( &tag );
pSym->get_name( &name );
printf( "\tClosest symbol: %ws (%ws)\n",
name != NULL ? name : L"",
szTags[ tag ] );
}
}
}
}
}
Požadavky
Hlavička: Dia2.h
Knihovna: diaguids.lib
DLL: msdia80.dll