IDiaSegment
Mapeia os dados contra o número de seção para segmentos de espaço de endereço.
IDiaSegment : IUnknown
Métodos na ordem de Vtable
A tabela a seguir mostra os métodos de IDiaSegment.
Método |
Descrição |
---|---|
Recupera o número de segmento. |
|
Recupera o deslocamento em segmentos onde a seção começa. |
|
Recupera o número de bytes no segmento. |
|
Recupera um sinalizador que indica se o segmento pode ser lido. |
|
Recupera um sinalizador que indica se o segmento pode ser modificado. |
|
Recupera um sinalizador que indica se o segmento é executável. |
|
Recupera o número de seção que mapeia para esse segmento. |
|
Recupera o endereço virtual relativo (RVA) do início da seção. |
|
Recupera o endereço virtual (VA) do início da seção. |
Comentários
Como o SDK DIA já realiza traduções do deslocamento de seção para endereços virtuais relativos, a maioria dos aplicativos não fará uso das informações no mapa do segmento.
Observações para chamadores
Obter essa interface chamando o IDiaEnumSegments::Item ou IDiaEnumSegments::Next métodos. Consulte o exemplo para obter detalhes.
Exemplo
Esta função exibe o endereço de todos os segmentos em uma tabela e o símbolo mais próximo.
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 ] );
}
}
}
}
}
Requisitos
Cabeçalho: Dia2.h
Biblioteca: diaguids.lib
DLL: msdia80.dll