Eric Pouech : winedump: Added stream header support.
Alexandre Julliard
julliard at winehq.org
Tue Jan 18 10:27:33 CST 2011
Module: wine
Branch: master
Commit: 5199d04b42c67efefac25c85a64e7e99cb5d6786
URL: http://source.winehq.org/git/wine.git/?a=commit;h=5199d04b42c67efefac25c85a64e7e99cb5d6786
Author: Eric Pouech <eric.pouech at 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);
More information about the wine-cvs
mailing list