mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-02 02:33:37 +00:00
winedump: Dump correctly ranges part of DBI stream.
The ranges describe for a PE image all the contributions of each compilation unit towards the various sections. Renaming offset_size into ranges_size which is closer to its actual content. Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
This commit is contained in:
parent
a0d4a58a34
commit
cf71edaa4e
|
@ -3270,7 +3270,7 @@ static void pdb_convert_symbols_header(PDB_SYMBOLS* symbols,
|
|||
const PDB_SYMBOLS_OLD* old = (const PDB_SYMBOLS_OLD*)image;
|
||||
symbols->version = 0;
|
||||
symbols->module_size = old->module_size;
|
||||
symbols->offset_size = old->offset_size;
|
||||
symbols->sectcontrib_size = old->sectcontrib_size;
|
||||
symbols->hash_size = old->hash_size;
|
||||
symbols->srcmodule_size = old->srcmodule_size;
|
||||
symbols->pdbimport_size = 0;
|
||||
|
@ -3633,8 +3633,8 @@ static void pdb_process_symbol_imports(const struct process* pcs,
|
|||
int i = 0;
|
||||
struct pdb_file_info sf0 = pdb_module_info->pdb_files[0];
|
||||
|
||||
imp = (const PDB_SYMBOL_IMPORT*)((const char*)symbols_image + sizeof(PDB_SYMBOLS) +
|
||||
symbols->module_size + symbols->offset_size +
|
||||
imp = (const PDB_SYMBOL_IMPORT*)((const char*)symbols_image + sizeof(PDB_SYMBOLS) +
|
||||
symbols->module_size + symbols->sectcontrib_size +
|
||||
symbols->hash_size + symbols->srcmodule_size);
|
||||
first = imp;
|
||||
last = (const char*)imp + symbols->pdbimport_size;
|
||||
|
@ -3745,7 +3745,7 @@ static BOOL pdb_process_internal(const struct process* pcs,
|
|||
break;
|
||||
case sizeof(PDB_STREAM_INDEXES):
|
||||
psi = (PDB_STREAM_INDEXES*)((const char*)symbols_image + sizeof(PDB_SYMBOLS) +
|
||||
symbols.module_size + symbols.offset_size +
|
||||
symbols.module_size + symbols.sectcontrib_size +
|
||||
symbols.hash_size + symbols.srcmodule_size +
|
||||
symbols.pdbimport_size + symbols.unknown2_size);
|
||||
pdb_file->fpoext_stream = psi->FPO_EXT;
|
||||
|
|
|
@ -2539,7 +2539,7 @@ typedef struct _PDB_SYMBOLS_OLD
|
|||
unsigned short gsym_stream;
|
||||
unsigned short pad;
|
||||
unsigned int module_size;
|
||||
unsigned int offset_size;
|
||||
unsigned int sectcontrib_size;
|
||||
unsigned int hash_size;
|
||||
unsigned int srcmodule_size;
|
||||
} PDB_SYMBOLS_OLD, *PPDB_SYMBOLS_OLD;
|
||||
|
@ -2556,7 +2556,7 @@ typedef struct _PDB_SYMBOLS
|
|||
unsigned short gsym_stream;
|
||||
unsigned short rbldVer;
|
||||
unsigned int module_size;
|
||||
unsigned int offset_size;
|
||||
unsigned int sectcontrib_size;
|
||||
unsigned int hash_size;
|
||||
unsigned int srcmodule_size;
|
||||
unsigned int pdbimport_size;
|
||||
|
|
|
@ -370,7 +370,7 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx
|
|||
"\tgsym_stream: %u\n"
|
||||
"\trbldVer: %u\n"
|
||||
"\tmodule_size: %08x\n"
|
||||
"\toffset_size: %08x\n"
|
||||
"\tsectcontrib_size: %08x\n"
|
||||
"\thash_size: %08x\n"
|
||||
"\tsrc_module_size: %08x\n"
|
||||
"\tpdbimport_size: %08x\n"
|
||||
|
@ -390,7 +390,7 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx
|
|||
symbols->gsym_stream,
|
||||
symbols->rbldVer,
|
||||
symbols->module_size,
|
||||
symbols->offset_size,
|
||||
symbols->sectcontrib_size,
|
||||
symbols->hash_size,
|
||||
symbols->srcmodule_size,
|
||||
symbols->pdbimport_size,
|
||||
|
@ -401,13 +401,64 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx
|
|||
get_machine_str( symbols->machine ),
|
||||
symbols->resvd4);
|
||||
|
||||
if (symbols->offset_size)
|
||||
if (symbols->sectcontrib_size)
|
||||
{
|
||||
const BYTE* src;
|
||||
const BYTE* src = (const BYTE*)symbols + sizeof(PDB_SYMBOLS) + symbols->module_size;
|
||||
const BYTE* last = src + symbols->sectcontrib_size;
|
||||
unsigned version, size;
|
||||
|
||||
printf("\t----------offsets------------\n");
|
||||
src = (const BYTE*)((const char*)symbols + sizeof(PDB_SYMBOLS) + symbols->module_size);
|
||||
dump_data(src, symbols->offset_size, " ");
|
||||
printf("\t----------section contrib------------\n");
|
||||
version = *(unsigned*)src;
|
||||
printf("\tVersion: %#x (%d)\n", version, version - 0xeffe0000);
|
||||
switch (version)
|
||||
{
|
||||
case 0xeffe0000 + 19970605: size = sizeof(PDB_SYMBOL_RANGE_EX); break;
|
||||
case 0xeffe0000 + 20140516: size = sizeof(PDB_SYMBOL_RANGE_EX) + sizeof(unsigned); break;
|
||||
default: printf("\t\tUnsupported version number\n"); size = 0;
|
||||
}
|
||||
if (size)
|
||||
{
|
||||
const PDB_SYMBOL_RANGE_EX* range;
|
||||
|
||||
if ((symbols->sectcontrib_size - sizeof(unsigned)) % size)
|
||||
printf("Incoherent size: %zu = %zu * %u + %zu\n",
|
||||
symbols->sectcontrib_size - sizeof(unsigned),
|
||||
(symbols->sectcontrib_size - sizeof(unsigned)) / size,
|
||||
size,
|
||||
(symbols->sectcontrib_size - sizeof(unsigned)) % size);
|
||||
if ((symbols->sectcontrib_size - sizeof(unsigned)) % size)
|
||||
if ((symbols->sectcontrib_size - sizeof(unsigned)) % size)
|
||||
src += sizeof(unsigned);
|
||||
while (src + size <= last)
|
||||
{
|
||||
range = (const PDB_SYMBOL_RANGE_EX*)(src + sizeof(unsigned));
|
||||
printf("\tRange #%tu\n",
|
||||
((const BYTE*)range - ((const BYTE*)symbols + sizeof(PDB_SYMBOLS) + symbols->module_size)) / size);
|
||||
printf("\t\tsegment: %04x\n"
|
||||
"\t\tpad1: %04x\n"
|
||||
"\t\toffset: %08x\n"
|
||||
"\t\tsize: %08x\n"
|
||||
"\t\tcharacteristics: %08x",
|
||||
range->segment,
|
||||
range->pad1,
|
||||
range->offset,
|
||||
range->size,
|
||||
range->characteristics);
|
||||
dump_section_characteristics(range->characteristics, " ");
|
||||
printf("\n"
|
||||
"\t\tindex: %04x\n"
|
||||
"\t\tpad2: %04x\n"
|
||||
"\t\ttimestamp: %08x\n"
|
||||
"\t\tunknown: %08x\n",
|
||||
range->index,
|
||||
range->pad2,
|
||||
range->timestamp,
|
||||
range->unknown);
|
||||
if (version == 0xeffe0000 + 20140516)
|
||||
printf("\t\tcoff_section: %08x\n", *(unsigned*)(range + 1));
|
||||
src += size;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!(filesimage = read_string_table(reader))) printf("string table not found\n");
|
||||
|
@ -422,8 +473,8 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx
|
|||
const char* cstr;
|
||||
|
||||
printf("\t----------src module------------\n");
|
||||
src = (const PDB_SYMBOL_SOURCE*)((const char*)symbols + sizeof(PDB_SYMBOLS) +
|
||||
symbols->module_size + symbols->offset_size + symbols->hash_size);
|
||||
src = (const PDB_SYMBOL_SOURCE*)((const char*)symbols + sizeof(PDB_SYMBOLS) +
|
||||
symbols->module_size + symbols->sectcontrib_size + symbols->hash_size);
|
||||
printf("\tSource Modules\n"
|
||||
"\t\tnModules: %u\n"
|
||||
"\t\tnSrcFiles: %u\n",
|
||||
|
@ -468,8 +519,8 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx
|
|||
const char* ptr;
|
||||
|
||||
printf("\t------------import--------------\n");
|
||||
imp = (const PDB_SYMBOL_IMPORT*)((const char*)symbols + sizeof(PDB_SYMBOLS) +
|
||||
symbols->module_size + symbols->offset_size +
|
||||
imp = (const PDB_SYMBOL_IMPORT*)((const char*)symbols + sizeof(PDB_SYMBOLS) +
|
||||
symbols->module_size + symbols->sectcontrib_size +
|
||||
symbols->hash_size + symbols->srcmodule_size);
|
||||
first = (const char*)imp;
|
||||
last = (const char*)imp + symbols->pdbimport_size;
|
||||
|
@ -504,7 +555,7 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx
|
|||
*/
|
||||
memcpy(sidx,
|
||||
(const char*)symbols + sizeof(PDB_SYMBOLS) + symbols->module_size +
|
||||
symbols->offset_size + symbols->hash_size + symbols->srcmodule_size +
|
||||
symbols->sectcontrib_size + symbols->hash_size + symbols->srcmodule_size +
|
||||
symbols->pdbimport_size + symbols->unknown2_size,
|
||||
sizeof(PDB_STREAM_INDEXES_OLD));
|
||||
printf("\tFPO: %04x\n"
|
||||
|
@ -519,7 +570,7 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx
|
|||
case sizeof(PDB_STREAM_INDEXES):
|
||||
memcpy(sidx,
|
||||
(const char*)symbols + sizeof(PDB_SYMBOLS) + symbols->module_size +
|
||||
symbols->offset_size + symbols->hash_size + symbols->srcmodule_size +
|
||||
symbols->sectcontrib_size + symbols->hash_size + symbols->srcmodule_size +
|
||||
symbols->pdbimport_size + symbols->unknown2_size,
|
||||
sizeof(*sidx));
|
||||
printf("\tFPO: %04x\n"
|
||||
|
@ -578,7 +629,15 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx
|
|||
"\t\t\tpad1: %04x\n"
|
||||
"\t\t\toffset: %08x\n"
|
||||
"\t\t\tsize: %08x\n"
|
||||
"\t\t\tcharacteristics: %08x\n"
|
||||
"\t\t\tcharacteristics: %08x",
|
||||
sym_file->unknown1,
|
||||
sym_file->range.segment,
|
||||
sym_file->range.pad1,
|
||||
sym_file->range.offset,
|
||||
sym_file->range.size,
|
||||
sym_file->range.characteristics);
|
||||
dump_section_characteristics(sym_file->range.characteristics, " ");
|
||||
printf("\n"
|
||||
"\t\t\tindex: %04x\n"
|
||||
"\t\t\tpad2: %04x\n"
|
||||
"\t\tflag: %04x\n"
|
||||
|
@ -588,12 +647,6 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx
|
|||
"\t\tline2 size: %08x\n"
|
||||
"\t\tnSrcFiles: %08x\n"
|
||||
"\t\tattribute: %08x\n",
|
||||
sym_file->unknown1,
|
||||
sym_file->range.segment,
|
||||
sym_file->range.pad1,
|
||||
sym_file->range.offset,
|
||||
sym_file->range.size,
|
||||
sym_file->range.characteristics,
|
||||
sym_file->range.index,
|
||||
sym_file->range.pad2,
|
||||
sym_file->flag,
|
||||
|
@ -623,7 +676,15 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx
|
|||
"\t\t\tpad1: %04x\n"
|
||||
"\t\t\toffset: %08x\n"
|
||||
"\t\t\tsize: %08x\n"
|
||||
"\t\t\tcharacteristics: %08x\n"
|
||||
"\t\t\tcharacteristics: %08x",
|
||||
sym_file->unknown1,
|
||||
sym_file->range.segment,
|
||||
sym_file->range.pad1,
|
||||
sym_file->range.offset,
|
||||
sym_file->range.size,
|
||||
sym_file->range.characteristics);
|
||||
dump_section_characteristics(sym_file->range.characteristics, " ");
|
||||
printf("\n"
|
||||
"\t\t\tindex: %04x\n"
|
||||
"\t\t\tpad2: %04x\n"
|
||||
"\t\t\ttimestamp: %08x\n"
|
||||
|
@ -637,12 +698,6 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx
|
|||
"\t\tattribute: %08x\n"
|
||||
"\t\treserved/0: %08x\n"
|
||||
"\t\treserved/1: %08x\n",
|
||||
sym_file->unknown1,
|
||||
sym_file->range.segment,
|
||||
sym_file->range.pad1,
|
||||
sym_file->range.offset,
|
||||
sym_file->range.size,
|
||||
sym_file->range.characteristics,
|
||||
sym_file->range.index,
|
||||
sym_file->range.pad2,
|
||||
sym_file->range.timestamp,
|
||||
|
|
Loading…
Reference in a new issue