Commit 5ddcb94a authored by Eric Pouech's avatar Eric Pouech Committed by Alexandre Julliard

winedump: Correct and update a couple of infos in PDB symbol stream header.

parent 8a9117ef
...@@ -2392,8 +2392,8 @@ static void pdb_convert_symbols_header(PDB_SYMBOLS* symbols, ...@@ -2392,8 +2392,8 @@ static void pdb_convert_symbols_header(PDB_SYMBOLS* symbols,
symbols->hash_size = old->hash_size; symbols->hash_size = old->hash_size;
symbols->srcmodule_size = old->srcmodule_size; symbols->srcmodule_size = old->srcmodule_size;
symbols->pdbimport_size = 0; symbols->pdbimport_size = 0;
symbols->hash1_file = old->hash1_file; symbols->global_file = old->global_file;
symbols->hash2_file = old->hash2_file; symbols->public_file = old->public_file;
symbols->gsym_file = old->gsym_file; symbols->gsym_file = old->gsym_file;
*header_size = sizeof(PDB_SYMBOLS_OLD); *header_size = sizeof(PDB_SYMBOLS_OLD);
......
...@@ -2367,8 +2367,8 @@ typedef struct _PDB_SYMBOL_IMPORT ...@@ -2367,8 +2367,8 @@ typedef struct _PDB_SYMBOL_IMPORT
typedef struct _PDB_SYMBOLS_OLD typedef struct _PDB_SYMBOLS_OLD
{ {
WORD hash1_file; WORD global_file;
WORD hash2_file; WORD public_file;
WORD gsym_file; WORD gsym_file;
WORD pad; WORD pad;
DWORD module_size; DWORD module_size;
...@@ -2381,11 +2381,13 @@ typedef struct _PDB_SYMBOLS ...@@ -2381,11 +2381,13 @@ typedef struct _PDB_SYMBOLS
{ {
DWORD signature; DWORD signature;
DWORD version; DWORD version;
DWORD unknown; DWORD age;
DWORD hash1_file; WORD global_file;
DWORD hash2_file; WORD flags;
WORD public_file;
WORD bldVer;
WORD gsym_file; WORD gsym_file;
WORD unknown1; WORD rbldVer;
DWORD module_size; DWORD module_size;
DWORD offset_size; DWORD offset_size;
DWORD hash_size; DWORD hash_size;
......
...@@ -222,6 +222,36 @@ static void *read_string_table(struct pdb_reader* reader) ...@@ -222,6 +222,36 @@ static void *read_string_table(struct pdb_reader* reader)
return NULL; return NULL;
} }
static void dump_global_symbol(struct pdb_reader* reader, unsigned file)
{
void* global = NULL;
DWORD size;
global = reader->read_file(reader, file);
if (!global) return;
size = pdb_get_file_size(reader, file);
printf("Global symbols table:\n");
dump_data(global, size, "\t");
free(global);
}
static void dump_public_symbol(struct pdb_reader* reader, unsigned file)
{
void* public = NULL;
DWORD size;
public = reader->read_file(reader, file);
if (!public) return;
size = pdb_get_file_size(reader, file);
printf("Public symbols table:\n");
dump_data(public, size, "\t");
free(public);
}
static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx) static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx)
{ {
PDB_SYMBOLS* symbols; PDB_SYMBOLS* symbols;
...@@ -229,6 +259,7 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx ...@@ -229,6 +259,7 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx
const char* file; const char* file;
char* filesimage; char* filesimage;
DWORD filessize = 0; DWORD filessize = 0;
char tcver[32];
sidx->FPO = sidx->unk0 = sidx->unk1 = sidx->unk2 = sidx->unk3 = sidx->segments = sidx->FPO = sidx->unk0 = sidx->unk1 = sidx->unk2 = sidx->unk3 = sidx->segments =
sidx->unk4 = sidx->unk5 = sidx->unk6 = sidx->FPO_EXT = sidx->unk7 = -1; sidx->unk4 = sidx->unk5 = sidx->unk6 = sidx->FPO_EXT = sidx->unk7 = -1;
...@@ -246,14 +277,20 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx ...@@ -246,14 +277,20 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx
default: default:
printf("-Unknown symbol info version %d\n", symbols->version); printf("-Unknown symbol info version %d\n", symbols->version);
} }
if (symbols->flags & 0x8000) /* new */
snprintf(tcver, sizeof(tcver), "%u.%u", (symbols->flags >> 8) & 0x7f, symbols->flags & 0xff);
else
snprintf(tcver, sizeof(tcver), "old-%x", symbols->flags);
printf("Symbols:\n" printf("Symbols:\n"
"\tsignature: %08x\n" "\tsignature: %08x\n"
"\tversion: %u\n" "\tversion: %u\n"
"\tunknown: %08x\n" "\tage: %08x\n"
"\thash1_file: %08x\n" "\tglobal_file: %u\n"
"\thash2_file: %08x\n" "\tbuilder: %s\n"
"\tgsym_file: %04x\n" "\tpublic_file: %u\n"
"\tunknown1: %04x\n" "\tbldVer: %u\n"
"\tgsym_file: %u\n"
"\trbldVer: %u\n"
"\tmodule_size: %08x\n" "\tmodule_size: %08x\n"
"\toffset_size: %08x\n" "\toffset_size: %08x\n"
"\thash_size: %08x\n" "\thash_size: %08x\n"
...@@ -264,14 +301,16 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx ...@@ -264,14 +301,16 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx
"\tunknown2_size: %08x\n" "\tunknown2_size: %08x\n"
"\tresvd3: %04x\n" "\tresvd3: %04x\n"
"\tmachine: %s\n" "\tmachine: %s\n"
"\tresvd[4] %08x\n", "\tresvd4 %08x\n",
symbols->signature, symbols->signature,
symbols->version, symbols->version,
symbols->unknown, symbols->age,
symbols->hash1_file, symbols->global_file,
symbols->hash2_file, tcver, /* from symbols->flags */
symbols->public_file,
symbols->bldVer,
symbols->gsym_file, symbols->gsym_file,
symbols->unknown1, symbols->rbldVer,
symbols->module_size, symbols->module_size,
symbols->offset_size, symbols->offset_size,
symbols->hash_size, symbols->hash_size,
...@@ -558,6 +597,8 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx ...@@ -558,6 +597,8 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx
file_name += strlen(file_name) + 1; file_name += strlen(file_name) + 1;
file = (char*)((DWORD_PTR)(file_name + strlen(file_name) + 1 + 3) & ~3); file = (char*)((DWORD_PTR)(file_name + strlen(file_name) + 1 + 3) & ~3);
} }
dump_global_symbol(reader, symbols->global_file);
dump_public_symbol(reader, symbols->public_file);
free(symbols); free(symbols);
free(filesimage); free(filesimage);
} }
...@@ -883,18 +924,22 @@ static void pdb_ds_dump(void) ...@@ -883,18 +924,22 @@ static void pdb_ds_dump(void)
reader.u.ds.header->unknown2, reader.u.ds.header->unknown2,
reader.u.ds.header->toc_page); reader.u.ds.header->toc_page);
/* files: /* files with static indexes:
* 0: JG says old toc pages, I'd say free pages (tbc, low prio) * 0: JG says old toc pages
* 1: root structure * 1: root structure
* 2: types * 2: types
* 3: modules * 3: modules
* 4: types (second stream)
* other known streams: * other known streams:
* - string table: its index is in the stream table from ROOT object under "/names" * - string table: its index is in the stream table from ROOT object under "/names"
* - type hash table: its index is in the types header (2 and 4)
* - global and public streams: from symbol stream header
* those streams get their indexes out of the PDB_STREAM_INDEXES object * those streams get their indexes out of the PDB_STREAM_INDEXES object
* - FPO data * - FPO data
* - segments * - segments
* - extended FPO data * - extended FPO data
*/ */
reader.file_used[0] |= 1; /* mark stream #0 as read */
reader.u.ds.root = reader.read_file(&reader, 1); reader.u.ds.root = reader.read_file(&reader, 1);
if (reader.u.ds.root) if (reader.u.ds.root)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment