Module: wine Branch: master Commit: 5199d04b42c67efefac25c85a64e7e99cb5d6786 URL: http://source.winehq.org/git/wine.git/?a=commit;h=5199d04b42c67efefac25c85a6...
Author: Eric Pouech eric.pouech@orange.fr Date: Mon Jan 17 21:53:25 2011 +0100
winedump: Added stream header support.
---
include/wine/mscvpdb.h | 29 +++++++++++++++++++++- tools/winedump/pdb.c | 62 ++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 83 insertions(+), 8 deletions(-)
diff --git a/include/wine/mscvpdb.h b/include/wine/mscvpdb.h index 637ed0f..99734c7 100644 --- a/include/wine/mscvpdb.h +++ b/include/wine/mscvpdb.h @@ -1914,12 +1914,39 @@ typedef struct _PDB_SYMBOLS DWORD hash_size; DWORD srcmodule_size; DWORD pdbimport_size; - DWORD resvd[3]; + DWORD resvd0; + DWORD stream_index_size; + DWORD unknown2_size; WORD resvd3; WORD machine; DWORD resvd4; } PDB_SYMBOLS, *PPDB_SYMBOLS;
+typedef struct +{ + WORD FPO; + WORD unk0; + WORD unk1; + WORD unk2; + WORD unk3; + WORD segments; +} PDB_STREAM_INDEXES_OLD; + +typedef struct +{ + WORD FPO; + WORD unk0; + WORD unk1; + WORD unk2; + WORD unk3; + WORD segments; + WORD unk4; + WORD unk5; + WORD unk6; + WORD FPO_EXT; + WORD unk7; +} PDB_STREAM_INDEXES; + typedef struct _PDB_FPO_DATA { DWORD start; diff --git a/tools/winedump/pdb.c b/tools/winedump/pdb.c index cd2eb50..0ba5b46 100644 --- a/tools/winedump/pdb.c +++ b/tools/winedump/pdb.c @@ -257,10 +257,10 @@ static void pdb_dump_symbols(struct pdb_reader* reader) "\thash_size: %08x\n" "\tsrc_module_size: %08x\n" "\tpdbimport_size: %08x\n" - "\tresvd[0] %08x\n" - "\tresvd[1] %08x\n" - "\tresvd[2] %08x\n" - "\tresvd[3] %04x\n" + "\tresvd0: %08x\n" + "\tstream_idx_size: %08x\n" + "\tunknown2_size: %08x\n" + "\tresvd3: %04x\n" "\tmachine: %s\n" "\tresvd[4] %08x\n", symbols->signature, @@ -275,9 +275,9 @@ static void pdb_dump_symbols(struct pdb_reader* reader) symbols->hash_size, symbols->srcmodule_size, symbols->pdbimport_size, - symbols->resvd[0], - symbols->resvd[1], - symbols->resvd[2], + symbols->resvd0, + symbols->stream_index_size, + symbols->unknown2_size, symbols->resvd3, get_machine_str( symbols->machine ), symbols->resvd4); @@ -375,6 +375,54 @@ static void pdb_dump_symbols(struct pdb_reader* reader) imp = (const PDB_SYMBOL_IMPORT*)(first + ((ptr - first + strlen(ptr) + 1 + 3) & ~3)); } } + if (symbols->stream_index_size) + { + const PDB_STREAM_INDEXES_OLD* sidx_old; + const PDB_STREAM_INDEXES* sidx; + + printf("\t------------stream indexes--------------\n"); + switch (symbols->stream_index_size) + { + case sizeof(PDB_STREAM_INDEXES_OLD): + sidx_old = (const PDB_STREAM_INDEXES_OLD*)((const char*)symbols + sizeof(PDB_SYMBOLS) + + symbols->module_size + symbols->offset_size + + symbols->hash_size + symbols->srcmodule_size + + symbols->pdbimport_size + symbols->unknown2_size); + printf("\tFPO: %04x\n" + "\t?: %04x\n" + "\t?: %04x\n" + "\t?: %04x\n" + "\t?: %04x\n" + "\tSegments: %04x\n", + sidx_old->FPO, sidx_old->unk0, sidx_old->unk1, sidx_old->unk2, sidx_old->unk3, + sidx_old->segments); + break; + case sizeof(PDB_STREAM_INDEXES): + sidx = (const PDB_STREAM_INDEXES*)((const char*)symbols + sizeof(PDB_SYMBOLS) + + symbols->module_size + symbols->offset_size + + symbols->hash_size + symbols->srcmodule_size + + symbols->pdbimport_size + symbols->unknown2_size); + + printf("\tFPO: %04x\n" + "\t?: %04x\n" + "\t?: %04x\n" + "\t?: %04x\n" + "\t?: %04x\n" + "\tSegments: %04x\n" + "\t?: %04x\n" + "\t?: %04x\n" + "\t?: %04x\n" + "\tFPO-ext: %04x\n" + "\t?: %04x\n", + sidx->FPO, sidx->unk0, sidx->unk1, sidx->unk2, sidx->unk3, + sidx->segments, sidx->unk4, sidx->unk5, sidx->unk6, sidx->FPO_EXT, + sidx->unk7); + break; + default: + printf("unexpected size for stream index %d\n", symbols->stream_index_size); + break; + } + }
/* Read global symbol table */ modimage = reader->read_file(reader, symbols->gsym_file);