Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Memetakan data dari nomor bagian ke segmen ruang alamat.
Sintaks
IDiaSegment : IUnknown
Metode dalam Urutan Vtable
Tabel berikut memperlihatkan metode IDiaSegment.
| Metode | Deskripsi |
|---|---|
| IDiaSegment::get_frame | Mengambil nomor segmen. |
| IDiaSegment::get_offset | Mengambil offset dalam segmen tempat bagian dimulai. |
| IDiaSegment::get_length | Ambil jumlah byte dalam segmen. |
| IDiaSegment::get_read | Mengambil bendera yang menunjukkan apakah segmen dapat dibaca. |
| IDiaSegment::get_write | Mengambil bendera yang menunjukkan apakah segmen dapat dimodifikasi. |
| IDiaSegment::get_execute | Ambil bendera yang menunjukkan apakah segmen dapat dijalankan. |
| IDiaSegment::get_addressSection | Mengambil nomor bagian yang memetakan ke segmen ini. |
| IDiaSegment::get_relativeVirtualAddress | Mengambil alamat virtual relatif (RVA) awal bagian. |
| IDiaSegment::get_virtualAddress | Mengambil alamat virtual (VA) dari awal bagian. |
Keterangan
Karena SDK Akses Antarmuka Debug (DIA) sudah melakukan terjemahan dari offset bagian ke alamat virtual relatif, sebagian besar aplikasi tidak akan menggunakan informasi di peta segmen.
Catatan untuk Penelepon
Dapatkan antarmuka ini dengan memanggil metode IDiaEnumSegments::Item atau IDiaEnumSegments::Next . Lihat contoh untuk detailnya.
Contoh
Fungsi ini menampilkan alamat semua segmen dalam tabel dan simbol terdekat.
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 ] );
}
}
}
}
}
Persyaratan
Header: Dia2.h
Library: diaguids.lib
DLL: msdia80.dll