IDiaSegment
將對應的位址空間的區段將章節編號的資料。
IDiaSegment : IUnknown
方法 Vtable 順序
下表顯示的方法IDiaSegment。
方法 |
描述 |
---|---|
擷取區段編號。 |
|
擷取一節的起始處的區段中的位移。 |
|
擷取區段中的位元組的數目。 |
|
會擷取旗標,指出是否可讀取該區段。 |
|
會擷取旗標,指出是否可以修改該區段。 |
|
會擷取旗標,指出是否可執行檔的區段。 |
|
擷取對應至這個區段的區段數目。 |
|
擷取區段開頭的相對虛擬的位址 (RVA)。 |
|
擷取區段開頭的虛擬位址 (VA)。 |
備註
因為 DIA SDK 已經從區段位移,轉譯執行相對虛擬位址,不會讓大部分的應用程式使用的對應區段中的資訊。
呼叫者的備忘稿
取得這個介面,藉由呼叫IDiaEnumSegments::Item或IDiaEnumSegments::Next方法。 範例中的,如需詳細資訊,請參閱。
範例
這個函式會顯示所有的區段的位址中的資料表和最接近的符號。
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 ] );
}
}
}
}
}
需求
標頭: Dia2.h
媒體櫃: diaguids.lib
DLL: msdia80.dll