From c77db0064ab5b4b022a27f56c005b4c3765167f1 Mon Sep 17 00:00:00 2001 From: Eric Pouech Date: Wed, 10 Nov 2021 16:42:55 +0100 Subject: [PATCH] winedump: Pass start offset when dumping symbols. Signed-off-by: Eric Pouech Signed-off-by: Alexandre Julliard --- tools/winedump/debug.c | 4 ++-- tools/winedump/lib.c | 2 +- tools/winedump/msc.c | 6 +++--- tools/winedump/pdb.c | 4 ++-- tools/winedump/winedump.h | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/tools/winedump/debug.c b/tools/winedump/debug.c index c2efeb24340..b49c6337494 100644 --- a/tools/winedump/debug.c +++ b/tools/winedump/debug.c @@ -135,7 +135,7 @@ static BOOL dump_cv_sst_global_pub(const OMFDirEntry* omfde) symbols = PRD(fileoffset + sizeof(OMFSymHash), header->cbSymbol); if (!symbols) {printf("Can't OMF-SymHash details, aborting\n"); return FALSE;} - codeview_dump_symbols(symbols, header->cbSymbol); + codeview_dump_symbols(symbols, 0, header->cbSymbol); return TRUE; } @@ -320,7 +320,7 @@ static BOOL dump_cv_sst_align_sym(const OMFDirEntry* omfde) if (!rawdata) {printf("Can't get srcAlignSym subsection details, aborting\n");return FALSE;} if (omfde->cb < sizeof(DWORD)) return TRUE; - codeview_dump_symbols(rawdata + sizeof(DWORD), omfde->cb - sizeof(DWORD)); + codeview_dump_symbols(rawdata, sizeof(DWORD), omfde->cb); return TRUE; } diff --git a/tools/winedump/lib.c b/tools/winedump/lib.c index 430ec2d4de7..4000e8679cf 100644 --- a/tools/winedump/lib.c +++ b/tools/winedump/lib.c @@ -97,7 +97,7 @@ static void dump_long_import(const void *base, const IMAGE_SECTION_HEADER *ish, { const char *imp_debugS = (const char *)base + ish[i].PointerToRawData; - codeview_dump_symbols(imp_debugS, ish[i].SizeOfRawData); + codeview_dump_symbols(imp_debugS, 0, ish[i].SizeOfRawData); printf("\n"); } } diff --git a/tools/winedump/msc.c b/tools/winedump/msc.c index cd91ea63634..f058eaf0b36 100644 --- a/tools/winedump/msc.c +++ b/tools/winedump/msc.c @@ -1303,7 +1303,7 @@ static void dump_binannot(const unsigned char* ba, const char* last, const char* } } -BOOL codeview_dump_symbols(const void* root, unsigned long size) +BOOL codeview_dump_symbols(const void* root, unsigned long start, unsigned long size) { unsigned int i; int length; @@ -1313,12 +1313,12 @@ BOOL codeview_dump_symbols(const void* root, unsigned long size) * Loop over the different types of records and whenever we * find something we are interested in, record it and move on. */ - for (i = 0; i < size; i += length) + for (i = start; i < size; i += length) { const union codeview_symbol* sym = (const union codeview_symbol*)((const char*)root + i); length = sym->generic.len + 2; if (!sym->generic.id || length < 4) break; - printf("\t%04x => ", i + 4); /* ref is made after id and len */ + printf("\t%04x => ", i); switch (sym->generic.id) { diff --git a/tools/winedump/pdb.c b/tools/winedump/pdb.c index 958a13f5e1c..7badc8a32e2 100644 --- a/tools/winedump/pdb.c +++ b/tools/winedump/pdb.c @@ -473,7 +473,7 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx if (modimage) { printf("\t------------globals-------------\n"); - codeview_dump_symbols(modimage, pdb_get_file_size(reader, symbols->gsym_file)); + codeview_dump_symbols(modimage, 0, pdb_get_file_size(reader, symbols->gsym_file)); free(modimage); } @@ -588,7 +588,7 @@ static void pdb_dump_symbols(struct pdb_reader* reader, PDB_STREAM_INDEXES* sidx int total_size = pdb_get_file_size(reader, file_nr); if (symbol_size) - codeview_dump_symbols((const char*)modimage + sizeof(DWORD), symbol_size); + codeview_dump_symbols((const char*)modimage, sizeof(DWORD), symbol_size); /* line number info */ if (lineno_size) diff --git a/tools/winedump/winedump.h b/tools/winedump/winedump.h index 236ce6dede3..6013d3caae6 100644 --- a/tools/winedump/winedump.h +++ b/tools/winedump/winedump.h @@ -259,7 +259,7 @@ void tlb_dump(void); enum FileSig get_kind_nls(void); void nls_dump(void); -BOOL codeview_dump_symbols(const void* root, unsigned long size); +BOOL codeview_dump_symbols(const void* root, unsigned long start, unsigned long size); BOOL codeview_dump_types_from_offsets(const void* table, const DWORD* offsets, unsigned num_types); BOOL codeview_dump_types_from_block(const void* table, unsigned long len); void codeview_dump_linetab(const char* linetab, BOOL pascal_str, const char* pfx);