winedump: Constify some pointers.
This commit is contained in:
parent
1e160c8418
commit
98783faaec
|
@ -99,14 +99,13 @@
|
|||
* (OMFDirHeader.cDir)
|
||||
*/
|
||||
|
||||
extern IMAGE_NT_HEADERS* PE_nt_headers;
|
||||
extern const IMAGE_NT_HEADERS* PE_nt_headers;
|
||||
static const void* cv_base /* = 0 */;
|
||||
|
||||
static void* cv_base /* = 0 */;
|
||||
|
||||
static int dump_cv_sst_module(OMFDirEntry* omfde)
|
||||
static int dump_cv_sst_module(const OMFDirEntry* omfde)
|
||||
{
|
||||
OMFModule* module;
|
||||
OMFSegDesc* segDesc;
|
||||
const OMFModule* module;
|
||||
const OMFSegDesc* segDesc;
|
||||
int i;
|
||||
|
||||
module = PRD(Offset(cv_base) + omfde->lfo, sizeof(OMFModule));
|
||||
|
@ -132,16 +131,16 @@ static int dump_cv_sst_module(OMFDirEntry* omfde)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static int dump_cv_sst_global_pub(OMFDirEntry* omfde)
|
||||
static int dump_cv_sst_global_pub(const OMFDirEntry* omfde)
|
||||
{
|
||||
long fileoffset;
|
||||
OMFSymHash* header;
|
||||
BYTE* symbols;
|
||||
BYTE* curpos;
|
||||
PUBSYM32* sym;
|
||||
unsigned symlen;
|
||||
int recordlen;
|
||||
char nametmp[256];
|
||||
long fileoffset;
|
||||
const OMFSymHash* header;
|
||||
const BYTE* symbols;
|
||||
const BYTE* curpos;
|
||||
const PUBSYM32* sym;
|
||||
unsigned symlen;
|
||||
int recordlen;
|
||||
char nametmp[256];
|
||||
|
||||
fileoffset = Offset(cv_base) + omfde->lfo;
|
||||
printf (" GlobalPub section starts at file offset 0x%lx\n", fileoffset);
|
||||
|
@ -189,34 +188,34 @@ static int dump_cv_sst_global_pub(OMFDirEntry* omfde)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static int dump_cv_sst_global_sym(OMFDirEntry* omfde)
|
||||
static int dump_cv_sst_global_sym(const OMFDirEntry* omfde)
|
||||
{
|
||||
/*** NOT YET IMPLEMENTED ***/
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int dump_cv_sst_static_sym(OMFDirEntry* omfde)
|
||||
static int dump_cv_sst_static_sym(const OMFDirEntry* omfde)
|
||||
{
|
||||
/*** NOT YET IMPLEMENTED ***/
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int dump_cv_sst_libraries(OMFDirEntry* omfde)
|
||||
static int dump_cv_sst_libraries(const OMFDirEntry* omfde)
|
||||
{
|
||||
/*** NOT YET IMPLEMENTED ***/
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int dump_cv_sst_global_types(OMFDirEntry* omfde)
|
||||
static int dump_cv_sst_global_types(const OMFDirEntry* omfde)
|
||||
{
|
||||
/*** NOT YET IMPLEMENTED ***/
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int dump_cv_sst_seg_map(OMFDirEntry* omfde)
|
||||
static int dump_cv_sst_seg_map(const OMFDirEntry* omfde)
|
||||
{
|
||||
OMFSegMap* segMap;
|
||||
OMFSegMapDesc* segMapDesc;
|
||||
const OMFSegMap* segMap;
|
||||
const OMFSegMapDesc* segMapDesc;
|
||||
int i;
|
||||
|
||||
segMap = PRD(Offset(cv_base) + omfde->lfo, sizeof(OMFSegMap));
|
||||
|
@ -244,22 +243,22 @@ static int dump_cv_sst_seg_map(OMFDirEntry* omfde)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static int dump_cv_sst_file_index(OMFDirEntry* omfde)
|
||||
static int dump_cv_sst_file_index(const OMFDirEntry* omfde)
|
||||
{
|
||||
/*** NOT YET IMPLEMENTED ***/
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int dump_cv_sst_src_module(OMFDirEntry* omfde)
|
||||
static int dump_cv_sst_src_module(const OMFDirEntry* omfde)
|
||||
{
|
||||
int i, j;
|
||||
BYTE* rawdata;
|
||||
unsigned long* seg_info_dw;
|
||||
unsigned short* seg_info_w;
|
||||
unsigned ofs;
|
||||
OMFSourceModule* sourceModule;
|
||||
OMFSourceFile* sourceFile;
|
||||
OMFSourceLine* sourceLine;
|
||||
int i, j;
|
||||
const BYTE* rawdata;
|
||||
const unsigned long* seg_info_dw;
|
||||
const unsigned short* seg_info_w;
|
||||
unsigned ofs;
|
||||
const OMFSourceModule* sourceModule;
|
||||
const OMFSourceFile* sourceFile;
|
||||
const OMFSourceLine* sourceLine;
|
||||
|
||||
rawdata = PRD(Offset(cv_base) + omfde->lfo, omfde->cb);
|
||||
if (!rawdata) {printf("Can't get srcModule subsection details, aborting\n");return FALSE;}
|
||||
|
@ -340,17 +339,17 @@ static int dump_cv_sst_src_module(OMFDirEntry* omfde)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static int dump_cv_sst_align_sym(OMFDirEntry* omfde)
|
||||
static int dump_cv_sst_align_sym(const OMFDirEntry* omfde)
|
||||
{
|
||||
/*** NOT YET IMPLEMENTED ***/
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void dump_codeview_all_modules(OMFDirHeader *omfdh)
|
||||
static void dump_codeview_all_modules(const OMFDirHeader *omfdh)
|
||||
{
|
||||
unsigned i;
|
||||
OMFDirEntry *dirEntry;
|
||||
const OMFDirEntry* dirEntry;
|
||||
const char* str;
|
||||
|
||||
if (!omfdh || !omfdh->cDir) return;
|
||||
|
@ -402,9 +401,9 @@ static void dump_codeview_all_modules(OMFDirHeader *omfdh)
|
|||
|
||||
static void dump_codeview_headers(unsigned long base, unsigned long len)
|
||||
{
|
||||
OMFDirHeader *dirHeader;
|
||||
OMFSignature *signature;
|
||||
OMFDirEntry *dirEntry;
|
||||
const OMFDirHeader* dirHeader;
|
||||
const OMFSignature* signature;
|
||||
const OMFDirEntry* dirEntry;
|
||||
unsigned i;
|
||||
int modulecount = 0, alignsymcount = 0, srcmodulecount = 0, librariescount = 0;
|
||||
int globalsymcount = 0, globalpubcount = 0, globaltypescount = 0;
|
||||
|
@ -507,14 +506,14 @@ static const char* get_coff_name( PIMAGE_SYMBOL coff_sym, const char* coff_str
|
|||
return nampnt;
|
||||
}
|
||||
|
||||
void dump_coff(unsigned long coffbase, unsigned long len, void* pmt)
|
||||
void dump_coff(unsigned long coffbase, unsigned long len, const void* pmt)
|
||||
{
|
||||
PIMAGE_COFF_SYMBOLS_HEADER coff;
|
||||
PIMAGE_SYMBOL coff_sym;
|
||||
PIMAGE_SYMBOL coff_symbols;
|
||||
PIMAGE_LINENUMBER coff_linetab;
|
||||
char * coff_strtab;
|
||||
IMAGE_SECTION_HEADER * sectHead = pmt;
|
||||
const IMAGE_SECTION_HEADER * sectHead = pmt;
|
||||
unsigned int i;
|
||||
const char * nampnt;
|
||||
int naux;
|
||||
|
|
|
@ -132,19 +132,19 @@ void dump_unicode_str( const WCHAR *str, int len )
|
|||
printf( "\"" );
|
||||
}
|
||||
|
||||
void* PRD(unsigned long prd, unsigned long len)
|
||||
const void* PRD(unsigned long prd, unsigned long len)
|
||||
{
|
||||
return (prd + len > dump_total_len) ? NULL : (char*)dump_base + prd;
|
||||
return (prd + len > dump_total_len) ? NULL : (const char*)dump_base + prd;
|
||||
}
|
||||
|
||||
unsigned long Offset(void* ptr)
|
||||
unsigned long Offset(const void* ptr)
|
||||
{
|
||||
if (ptr < dump_base) {printf("<<<<<ptr below\n");return 0;}
|
||||
if ((char *)ptr >= (char*)dump_base + dump_total_len) {printf("<<<<<ptr above\n");return 0;}
|
||||
if ((const char *)ptr >= (const char*)dump_base + dump_total_len) {printf("<<<<<ptr above\n");return 0;}
|
||||
return (char*)ptr - (char*)dump_base;
|
||||
}
|
||||
|
||||
static void do_dump( enum FileSig sig, void* pmt )
|
||||
static void do_dump( enum FileSig sig, const void* pmt )
|
||||
{
|
||||
if (sig == SIG_NE)
|
||||
{
|
||||
|
@ -163,9 +163,9 @@ static void do_dump( enum FileSig sig, void* pmt )
|
|||
|
||||
static enum FileSig check_headers(void)
|
||||
{
|
||||
WORD* pw;
|
||||
DWORD* pdw;
|
||||
IMAGE_DOS_HEADER* dh;
|
||||
const WORD* pw;
|
||||
const DWORD* pdw;
|
||||
const IMAGE_DOS_HEADER* dh;
|
||||
enum FileSig sig;
|
||||
|
||||
pw = PRD(0, sizeof(WORD));
|
||||
|
@ -186,11 +186,11 @@ static enum FileSig check_headers(void)
|
|||
{
|
||||
sig = SIG_PE;
|
||||
}
|
||||
else if (*(WORD *)pdw == IMAGE_OS2_SIGNATURE)
|
||||
else if (*(const WORD *)pdw == IMAGE_OS2_SIGNATURE)
|
||||
{
|
||||
sig = SIG_NE;
|
||||
}
|
||||
else if (*(WORD *)pdw == IMAGE_VXD_SIGNATURE)
|
||||
else if (*(const WORD *)pdw == IMAGE_VXD_SIGNATURE)
|
||||
{
|
||||
sig = SIG_LE;
|
||||
}
|
||||
|
@ -223,7 +223,7 @@ static enum FileSig check_headers(void)
|
|||
return sig;
|
||||
}
|
||||
|
||||
int dump_analysis(const char* name, void (*fn)(enum FileSig, void*), enum FileSig wanted_sig)
|
||||
int dump_analysis(const char *name, file_dumper fn, enum FileSig wanted_sig)
|
||||
{
|
||||
int fd;
|
||||
enum FileSig effective_sig;
|
||||
|
|
|
@ -37,17 +37,17 @@ static void dump_mdmp_data(const MINIDUMP_LOCATION_DESCRIPTOR* md, const char* p
|
|||
|
||||
static void dump_mdmp_string(DWORD rva)
|
||||
{
|
||||
MINIDUMP_STRING* ms = PRD(rva, sizeof(MINIDUMP_STRING));
|
||||
const MINIDUMP_STRING* ms = PRD(rva, sizeof(MINIDUMP_STRING));
|
||||
if (ms)
|
||||
dump_unicode_str( ms->Buffer, ms->Length / sizeof(WCHAR) );
|
||||
else
|
||||
printf("<<?>>");
|
||||
}
|
||||
|
||||
static MINIDUMP_DIRECTORY* get_mdmp_dir(const MINIDUMP_HEADER* hdr, int str_idx)
|
||||
static const MINIDUMP_DIRECTORY* get_mdmp_dir(const MINIDUMP_HEADER* hdr, int str_idx)
|
||||
{
|
||||
MINIDUMP_DIRECTORY* dir;
|
||||
unsigned int i;
|
||||
const MINIDUMP_DIRECTORY* dir;
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < hdr->NumberOfStreams; i++)
|
||||
{
|
||||
|
@ -61,10 +61,10 @@ static MINIDUMP_DIRECTORY* get_mdmp_dir(const MINIDUMP_HEADER* hdr, int str_idx)
|
|||
|
||||
void mdmp_dump(void)
|
||||
{
|
||||
MINIDUMP_HEADER* hdr = (MINIDUMP_HEADER*)PRD(0, sizeof(MINIDUMP_HEADER));
|
||||
ULONG idx, ndir = 0;
|
||||
MINIDUMP_DIRECTORY* dir;
|
||||
void* stream;
|
||||
const MINIDUMP_HEADER* hdr = (const MINIDUMP_HEADER*)PRD(0, sizeof(MINIDUMP_HEADER));
|
||||
ULONG idx, ndir = 0;
|
||||
const MINIDUMP_DIRECTORY* dir;
|
||||
const void* stream;
|
||||
|
||||
if (!hdr)
|
||||
{
|
||||
|
@ -72,7 +72,7 @@ void mdmp_dump(void)
|
|||
return;
|
||||
}
|
||||
|
||||
printf("Signature: %lu (%.4s)\n", hdr->Signature, (char*)&hdr->Signature);
|
||||
printf("Signature: %lu (%.4s)\n", hdr->Signature, (const char*)&hdr->Signature);
|
||||
printf("Version: %lx\n", hdr->Version);
|
||||
printf("NumberOfStreams: %lu\n", hdr->NumberOfStreams);
|
||||
printf("StreamDirectoryRva: %lu\n", hdr->StreamDirectoryRva);
|
||||
|
@ -90,9 +90,9 @@ void mdmp_dump(void)
|
|||
{
|
||||
case ThreadListStream:
|
||||
{
|
||||
MINIDUMP_THREAD_LIST* mtl = (MINIDUMP_THREAD_LIST*)stream;
|
||||
MINIDUMP_THREAD* mt = &mtl->Threads[0];
|
||||
unsigned int i;
|
||||
const MINIDUMP_THREAD_LIST* mtl = (const MINIDUMP_THREAD_LIST*)stream;
|
||||
const MINIDUMP_THREAD* mt = &mtl->Threads[0];
|
||||
unsigned int i;
|
||||
|
||||
printf("Threads: %lu\n", mtl->NumberOfThreads);
|
||||
for (i = 0; i < mtl->NumberOfThreads; i++, mt++)
|
||||
|
@ -115,11 +115,11 @@ void mdmp_dump(void)
|
|||
case ModuleListStream:
|
||||
case 0xFFF0:
|
||||
{
|
||||
MINIDUMP_MODULE_LIST* mml = (MINIDUMP_MODULE_LIST*)stream;
|
||||
MINIDUMP_MODULE* mm = &mml->Modules[0];
|
||||
unsigned int i;
|
||||
const char* p1;
|
||||
const char* p2;
|
||||
const MINIDUMP_MODULE_LIST* mml = (const MINIDUMP_MODULE_LIST*)stream;
|
||||
const MINIDUMP_MODULE* mm = &mml->Modules[0];
|
||||
unsigned int i;
|
||||
const char* p1;
|
||||
const char* p2;
|
||||
|
||||
printf("Modules (%s): %lu\n",
|
||||
dir->StreamType == ModuleListStream ? "PE" : "ELF",
|
||||
|
@ -207,9 +207,9 @@ void mdmp_dump(void)
|
|||
break;
|
||||
case MemoryListStream:
|
||||
{
|
||||
MINIDUMP_MEMORY_LIST* mml = (MINIDUMP_MEMORY_LIST*)stream;
|
||||
MINIDUMP_MEMORY_DESCRIPTOR* mmd = &mml->MemoryRanges[0];
|
||||
unsigned int i;
|
||||
const MINIDUMP_MEMORY_LIST* mml = (const MINIDUMP_MEMORY_LIST*)stream;
|
||||
const MINIDUMP_MEMORY_DESCRIPTOR* mmd = &mml->MemoryRanges[0];
|
||||
unsigned int i;
|
||||
|
||||
printf("Memory Ranges: %lu\n", mml->NumberOfMemoryRanges);
|
||||
for (i = 0; i < mml->NumberOfMemoryRanges; i++, mmd++)
|
||||
|
@ -224,7 +224,7 @@ void mdmp_dump(void)
|
|||
break;
|
||||
case SystemInfoStream:
|
||||
{
|
||||
MINIDUMP_SYSTEM_INFO* msi = (MINIDUMP_SYSTEM_INFO*)stream;
|
||||
const MINIDUMP_SYSTEM_INFO* msi = (const MINIDUMP_SYSTEM_INFO*)stream;
|
||||
const char* str;
|
||||
char tmp[128];
|
||||
|
||||
|
@ -307,7 +307,7 @@ void mdmp_dump(void)
|
|||
if (msi->ProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL)
|
||||
{
|
||||
printf(" x86.VendorId: %.12s\n",
|
||||
(char*)&msi->Cpu.X86CpuInfo.VendorId[0]);
|
||||
(const char*)&msi->Cpu.X86CpuInfo.VendorId[0]);
|
||||
printf(" x86.VersionInformation: %lx\n",
|
||||
msi->Cpu.X86CpuInfo.VersionInformation);
|
||||
printf(" x86.FeatureInformation: %lx\n",
|
||||
|
@ -319,7 +319,8 @@ void mdmp_dump(void)
|
|||
break;
|
||||
case MiscInfoStream:
|
||||
{
|
||||
MINIDUMP_MISC_INFO* mmi = (MINIDUMP_MISC_INFO*)stream;
|
||||
const MINIDUMP_MISC_INFO* mmi = (const MINIDUMP_MISC_INFO*)stream;
|
||||
|
||||
printf("Misc Information\n");
|
||||
printf(" Size: %lu\n", mmi->SizeOfInfo);
|
||||
printf(" Flags: %s%s\n",
|
||||
|
@ -337,8 +338,8 @@ void mdmp_dump(void)
|
|||
break;
|
||||
case ExceptionStream:
|
||||
{
|
||||
MINIDUMP_EXCEPTION_STREAM* mes = (MINIDUMP_EXCEPTION_STREAM*)stream;
|
||||
unsigned int i;
|
||||
const MINIDUMP_EXCEPTION_STREAM* mes = (const MINIDUMP_EXCEPTION_STREAM*)stream;
|
||||
unsigned int i;
|
||||
|
||||
printf("Exception:\n");
|
||||
printf(" ThreadId: %08lx\n", mes->ThreadId);
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
#include "winedump.h"
|
||||
#include "pe.h"
|
||||
|
||||
static IMAGE_NT_HEADERS32* PE_nt_headers;
|
||||
static const IMAGE_NT_HEADERS32* PE_nt_headers;
|
||||
|
||||
static const char* get_machine_str(DWORD mach)
|
||||
{
|
||||
|
@ -66,7 +66,7 @@ static const char* get_machine_str(DWORD mach)
|
|||
return "???";
|
||||
}
|
||||
|
||||
static void* RVA(unsigned long rva, unsigned long len)
|
||||
static const void* RVA(unsigned long rva, unsigned long len)
|
||||
{
|
||||
IMAGE_SECTION_HEADER* sectHead;
|
||||
int i;
|
||||
|
@ -87,10 +87,10 @@ static void* RVA(unsigned long rva, unsigned long len)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static IMAGE_NT_HEADERS32 *get_nt_header( void *pmt )
|
||||
static const IMAGE_NT_HEADERS32 *get_nt_header( const void *pmt )
|
||||
{
|
||||
IMAGE_DOS_HEADER *dos = pmt;
|
||||
return (IMAGE_NT_HEADERS32 *)((BYTE *)dos + dos->e_lfanew);
|
||||
const IMAGE_DOS_HEADER *dos = pmt;
|
||||
return (const IMAGE_NT_HEADERS32 *)((const BYTE *)dos + dos->e_lfanew);
|
||||
}
|
||||
|
||||
static int is_fake_dll( const void *base )
|
||||
|
@ -103,11 +103,11 @@ static int is_fake_dll( const void *base )
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static void *get_dir_and_size(unsigned int idx, unsigned int *size)
|
||||
static const void *get_dir_and_size(unsigned int idx, unsigned int *size)
|
||||
{
|
||||
if(PE_nt_headers->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC)
|
||||
{
|
||||
IMAGE_OPTIONAL_HEADER64 *opt = (IMAGE_OPTIONAL_HEADER64*)&PE_nt_headers->OptionalHeader;
|
||||
const IMAGE_OPTIONAL_HEADER64 *opt = (const IMAGE_OPTIONAL_HEADER64*)&PE_nt_headers->OptionalHeader;
|
||||
if (idx >= opt->NumberOfRvaAndSizes)
|
||||
return NULL;
|
||||
if(size)
|
||||
|
@ -117,7 +117,7 @@ static void *get_dir_and_size(unsigned int idx, unsigned int *size)
|
|||
}
|
||||
else
|
||||
{
|
||||
IMAGE_OPTIONAL_HEADER32 *opt = (IMAGE_OPTIONAL_HEADER32*)&PE_nt_headers->OptionalHeader;
|
||||
const IMAGE_OPTIONAL_HEADER32 *opt = (const IMAGE_OPTIONAL_HEADER32*)&PE_nt_headers->OptionalHeader;
|
||||
if (idx >= opt->NumberOfRvaAndSizes)
|
||||
return NULL;
|
||||
if(size)
|
||||
|
@ -127,7 +127,7 @@ static void *get_dir_and_size(unsigned int idx, unsigned int *size)
|
|||
}
|
||||
}
|
||||
|
||||
static void* get_dir(unsigned idx)
|
||||
static const void* get_dir(unsigned idx)
|
||||
{
|
||||
return get_dir_and_size(idx, 0);
|
||||
}
|
||||
|
@ -204,7 +204,7 @@ static inline void print_dllflags(const char *title, WORD value)
|
|||
#undef X
|
||||
}
|
||||
|
||||
static inline void print_datadirectory(DWORD n, IMAGE_DATA_DIRECTORY *directory)
|
||||
static inline void print_datadirectory(DWORD n, const IMAGE_DATA_DIRECTORY *directory)
|
||||
{
|
||||
unsigned i;
|
||||
printf("Data Directory\n");
|
||||
|
@ -218,7 +218,7 @@ static inline void print_datadirectory(DWORD n, IMAGE_DATA_DIRECTORY *directory)
|
|||
}
|
||||
}
|
||||
|
||||
static void dump_optional_header32(IMAGE_OPTIONAL_HEADER32 *optionalHeader)
|
||||
static void dump_optional_header32(const IMAGE_OPTIONAL_HEADER32 *optionalHeader)
|
||||
{
|
||||
print_word("Magic", optionalHeader->Magic);
|
||||
print_ver("linker version",
|
||||
|
@ -254,7 +254,7 @@ static void dump_optional_header32(IMAGE_OPTIONAL_HEADER32 *optionalHeader)
|
|||
print_datadirectory(optionalHeader->NumberOfRvaAndSizes, optionalHeader->DataDirectory);
|
||||
}
|
||||
|
||||
static void dump_optional_header64(IMAGE_OPTIONAL_HEADER64 *optionalHeader)
|
||||
static void dump_optional_header64(const IMAGE_OPTIONAL_HEADER64 *optionalHeader)
|
||||
{
|
||||
print_word("Magic", optionalHeader->Magic);
|
||||
print_ver("linker version",
|
||||
|
@ -291,7 +291,7 @@ static void dump_optional_header64(IMAGE_OPTIONAL_HEADER64 *optionalHeader)
|
|||
|
||||
static void dump_pe_header(void)
|
||||
{
|
||||
IMAGE_FILE_HEADER *fileHeader;
|
||||
const IMAGE_FILE_HEADER *fileHeader;
|
||||
|
||||
printf("File Header\n");
|
||||
fileHeader = &PE_nt_headers->FileHeader;
|
||||
|
@ -330,10 +330,10 @@ static void dump_pe_header(void)
|
|||
printf("Optional Header (%s)\n", get_magic_type(PE_nt_headers->OptionalHeader.Magic));
|
||||
switch(PE_nt_headers->OptionalHeader.Magic) {
|
||||
case IMAGE_NT_OPTIONAL_HDR32_MAGIC:
|
||||
dump_optional_header32((IMAGE_OPTIONAL_HEADER32*)&PE_nt_headers->OptionalHeader);
|
||||
dump_optional_header32((const IMAGE_OPTIONAL_HEADER32*)&PE_nt_headers->OptionalHeader);
|
||||
break;
|
||||
case IMAGE_NT_OPTIONAL_HDR64_MAGIC:
|
||||
dump_optional_header64((IMAGE_OPTIONAL_HEADER64*)&PE_nt_headers->OptionalHeader);
|
||||
dump_optional_header64((const IMAGE_OPTIONAL_HEADER64*)&PE_nt_headers->OptionalHeader);
|
||||
break;
|
||||
default:
|
||||
printf(" Unknown header magic: 0x%-4X\n", PE_nt_headers->OptionalHeader.Magic);
|
||||
|
@ -342,9 +342,9 @@ static void dump_pe_header(void)
|
|||
printf("\n");
|
||||
}
|
||||
|
||||
static void dump_sections(void* addr, unsigned num_sect)
|
||||
static void dump_sections(const void* addr, unsigned num_sect)
|
||||
{
|
||||
IMAGE_SECTION_HEADER* sectHead = addr;
|
||||
const IMAGE_SECTION_HEADER* sectHead = addr;
|
||||
unsigned i;
|
||||
|
||||
printf("Section Table\n");
|
||||
|
@ -416,19 +416,19 @@ static void dump_sections(void* addr, unsigned num_sect)
|
|||
static void dump_dir_exported_functions(void)
|
||||
{
|
||||
unsigned int size = 0;
|
||||
IMAGE_EXPORT_DIRECTORY *exportDir = get_dir_and_size(IMAGE_FILE_EXPORT_DIRECTORY, &size);
|
||||
const IMAGE_EXPORT_DIRECTORY*exportDir = get_dir_and_size(IMAGE_FILE_EXPORT_DIRECTORY, &size);
|
||||
unsigned int i;
|
||||
DWORD* pFunc;
|
||||
DWORD* pName;
|
||||
WORD* pOrdl;
|
||||
DWORD* map;
|
||||
const DWORD* pFunc;
|
||||
const DWORD* pName;
|
||||
const WORD* pOrdl;
|
||||
DWORD* map;
|
||||
parsed_symbol symbol;
|
||||
|
||||
if (!exportDir) return;
|
||||
|
||||
printf("Exports table:\n");
|
||||
printf("\n");
|
||||
printf(" Name: %s\n", (char*)RVA(exportDir->Name, sizeof(DWORD)));
|
||||
printf(" Name: %s\n", (const char*)RVA(exportDir->Name, sizeof(DWORD)));
|
||||
printf(" Characteristics: %08lx\n", exportDir->Characteristics);
|
||||
printf(" TimeDateStamp: %08lX %s\n",
|
||||
exportDir->TimeDateStamp, get_time_str(exportDir->TimeDateStamp));
|
||||
|
@ -455,11 +455,11 @@ static void dump_dir_exported_functions(void)
|
|||
|
||||
for (i = 0; i < exportDir->NumberOfNames; i++, pName++, pOrdl++)
|
||||
{
|
||||
char* name;
|
||||
const char* name;
|
||||
|
||||
map[*pOrdl / 32] |= 1 << (*pOrdl % 32);
|
||||
|
||||
name = (char*)RVA(*pName, sizeof(DWORD));
|
||||
name = (const char*)RVA(*pName, sizeof(DWORD));
|
||||
if (name && globals.do_demangle)
|
||||
{
|
||||
printf(" %08lX %4lu ", pFunc[*pOrdl], exportDir->Base + *pOrdl);
|
||||
|
@ -478,9 +478,9 @@ static void dump_dir_exported_functions(void)
|
|||
printf(" %08lX %4lu %s", pFunc[*pOrdl], exportDir->Base + *pOrdl, name);
|
||||
}
|
||||
/* check for forwarded function */
|
||||
if ((char *)RVA(pFunc[*pOrdl],sizeof(void*)) >= (char *)exportDir &&
|
||||
(char *)RVA(pFunc[*pOrdl],sizeof(void*)) < (char *)exportDir + size)
|
||||
printf( " (-> %s)", (char *)RVA(pFunc[*pOrdl],1));
|
||||
if ((const char *)RVA(pFunc[*pOrdl],sizeof(void*)) >= (const char *)exportDir &&
|
||||
(const char *)RVA(pFunc[*pOrdl],sizeof(void*)) < (const char *)exportDir + size)
|
||||
printf( " (-> %s)", (const char *)RVA(pFunc[*pOrdl],1));
|
||||
printf("\n");
|
||||
}
|
||||
pFunc = RVA(exportDir->AddressOfFunctions, exportDir->NumberOfFunctions * sizeof(DWORD));
|
||||
|
@ -496,10 +496,10 @@ static void dump_dir_exported_functions(void)
|
|||
printf("\n");
|
||||
}
|
||||
|
||||
static void dump_image_thunk_data64(IMAGE_THUNK_DATA64 *il)
|
||||
static void dump_image_thunk_data64(const IMAGE_THUNK_DATA64 *il)
|
||||
{
|
||||
/* FIXME: This does not properly handle large images */
|
||||
IMAGE_IMPORT_BY_NAME* iibn;
|
||||
const IMAGE_IMPORT_BY_NAME* iibn;
|
||||
for (; il->u1.Ordinal; il++)
|
||||
{
|
||||
if (IMAGE_SNAP_BY_ORDINAL64(il->u1.Ordinal))
|
||||
|
@ -515,9 +515,9 @@ static void dump_image_thunk_data64(IMAGE_THUNK_DATA64 *il)
|
|||
}
|
||||
}
|
||||
|
||||
static void dump_image_thunk_data32(IMAGE_THUNK_DATA32 *il)
|
||||
static void dump_image_thunk_data32(const IMAGE_THUNK_DATA32 *il)
|
||||
{
|
||||
IMAGE_IMPORT_BY_NAME* iibn;
|
||||
const IMAGE_IMPORT_BY_NAME* iibn;
|
||||
for (; il->u1.Ordinal; il++)
|
||||
{
|
||||
if (IMAGE_SNAP_BY_ORDINAL32(il->u1.Ordinal))
|
||||
|
@ -535,18 +535,18 @@ static void dump_image_thunk_data32(IMAGE_THUNK_DATA32 *il)
|
|||
|
||||
static void dump_dir_imported_functions(void)
|
||||
{
|
||||
IMAGE_IMPORT_DESCRIPTOR *importDesc = get_dir(IMAGE_FILE_IMPORT_DIRECTORY);
|
||||
const IMAGE_IMPORT_DESCRIPTOR *importDesc = get_dir(IMAGE_FILE_IMPORT_DIRECTORY);
|
||||
DWORD directorySize;
|
||||
|
||||
if (!importDesc) return;
|
||||
if(PE_nt_headers->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC)
|
||||
{
|
||||
IMAGE_OPTIONAL_HEADER64 *opt = (IMAGE_OPTIONAL_HEADER64*)&PE_nt_headers->OptionalHeader;
|
||||
const IMAGE_OPTIONAL_HEADER64 *opt = (const IMAGE_OPTIONAL_HEADER64*)&PE_nt_headers->OptionalHeader;
|
||||
directorySize = opt->DataDirectory[IMAGE_FILE_IMPORT_DIRECTORY].Size;
|
||||
}
|
||||
else
|
||||
{
|
||||
IMAGE_OPTIONAL_HEADER32 *opt = (IMAGE_OPTIONAL_HEADER32*)&PE_nt_headers->OptionalHeader;
|
||||
const IMAGE_OPTIONAL_HEADER32 *opt = (const IMAGE_OPTIONAL_HEADER32*)&PE_nt_headers->OptionalHeader;
|
||||
directorySize = opt->DataDirectory[IMAGE_FILE_IMPORT_DIRECTORY].Size;
|
||||
}
|
||||
|
||||
|
@ -554,11 +554,11 @@ static void dump_dir_imported_functions(void)
|
|||
|
||||
for (;;)
|
||||
{
|
||||
IMAGE_THUNK_DATA32* il;
|
||||
const IMAGE_THUNK_DATA32* il;
|
||||
|
||||
if (!importDesc->Name || !importDesc->FirstThunk) break;
|
||||
|
||||
printf(" offset %08lx %s\n", Offset(importDesc), (char*)RVA(importDesc->Name, sizeof(DWORD)));
|
||||
printf(" offset %08lx %s\n", Offset(importDesc), (const char*)RVA(importDesc->Name, sizeof(DWORD)));
|
||||
printf(" Hint/Name Table: %08lX\n", (DWORD)importDesc->u.OriginalFirstThunk);
|
||||
printf(" TimeDataStamp: %08lX (%s)\n",
|
||||
importDesc->TimeDateStamp, get_time_str(importDesc->TimeDateStamp));
|
||||
|
@ -576,7 +576,7 @@ static void dump_dir_imported_functions(void)
|
|||
else
|
||||
{
|
||||
if(PE_nt_headers->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC)
|
||||
dump_image_thunk_data64((IMAGE_THUNK_DATA64*)il);
|
||||
dump_image_thunk_data64((const IMAGE_THUNK_DATA64*)il);
|
||||
else
|
||||
dump_image_thunk_data32(il);
|
||||
printf("\n");
|
||||
|
@ -588,7 +588,7 @@ static void dump_dir_imported_functions(void)
|
|||
|
||||
static void dump_dir_delay_imported_functions(void)
|
||||
{
|
||||
struct ImgDelayDescr
|
||||
const struct ImgDelayDescr
|
||||
{
|
||||
DWORD grAttrs;
|
||||
DWORD szName;
|
||||
|
@ -604,12 +604,12 @@ static void dump_dir_delay_imported_functions(void)
|
|||
if (!importDesc) return;
|
||||
if (PE_nt_headers->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC)
|
||||
{
|
||||
IMAGE_OPTIONAL_HEADER64 *opt = (IMAGE_OPTIONAL_HEADER64 *)&PE_nt_headers->OptionalHeader;
|
||||
const IMAGE_OPTIONAL_HEADER64 *opt = (const IMAGE_OPTIONAL_HEADER64 *)&PE_nt_headers->OptionalHeader;
|
||||
directorySize = opt->DataDirectory[IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT].Size;
|
||||
}
|
||||
else
|
||||
{
|
||||
IMAGE_OPTIONAL_HEADER32 *opt = (IMAGE_OPTIONAL_HEADER32 *)&PE_nt_headers->OptionalHeader;
|
||||
const IMAGE_OPTIONAL_HEADER32 *opt = (const IMAGE_OPTIONAL_HEADER32 *)&PE_nt_headers->OptionalHeader;
|
||||
directorySize = opt->DataDirectory[IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT].Size;
|
||||
}
|
||||
|
||||
|
@ -617,27 +617,27 @@ static void dump_dir_delay_imported_functions(void)
|
|||
|
||||
for (;;)
|
||||
{
|
||||
BOOL use_rva = importDesc->grAttrs & 1;
|
||||
IMAGE_THUNK_DATA32 *il;
|
||||
BOOL use_rva = importDesc->grAttrs & 1;
|
||||
const IMAGE_THUNK_DATA32* il;
|
||||
|
||||
if (!importDesc->szName || !importDesc->pIAT || !importDesc->pINT) break;
|
||||
|
||||
printf(" grAttrs %08lx offset %08lx %s\n", importDesc->grAttrs, Offset(importDesc),
|
||||
use_rva ? (char *)RVA(importDesc->szName, sizeof(DWORD)) : (char *)importDesc->szName);
|
||||
use_rva ? (const char *)RVA(importDesc->szName, sizeof(DWORD)) : (char *)importDesc->szName);
|
||||
printf(" Hint/Name Table: %08lx\n", importDesc->pINT);
|
||||
printf(" TimeDataStamp: %08lX (%s)\n",
|
||||
importDesc->dwTimeStamp, get_time_str(importDesc->dwTimeStamp));
|
||||
|
||||
printf(" Ordn Name\n");
|
||||
|
||||
il = use_rva ? (IMAGE_THUNK_DATA32 *)RVA(importDesc->pINT, sizeof(DWORD)) : (IMAGE_THUNK_DATA32 *)importDesc->pINT;
|
||||
il = use_rva ? (const IMAGE_THUNK_DATA32 *)RVA(importDesc->pINT, sizeof(DWORD)) : (const IMAGE_THUNK_DATA32 *)importDesc->pINT;
|
||||
|
||||
if (!il)
|
||||
printf("Can't grab thunk data, going to next imported DLL\n");
|
||||
else
|
||||
{
|
||||
if (PE_nt_headers->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC)
|
||||
dump_image_thunk_data64((IMAGE_THUNK_DATA64 *)il);
|
||||
dump_image_thunk_data64((const IMAGE_THUNK_DATA64 *)il);
|
||||
else
|
||||
dump_image_thunk_data32(il);
|
||||
printf("\n");
|
||||
|
@ -647,7 +647,7 @@ static void dump_dir_delay_imported_functions(void)
|
|||
printf("\n");
|
||||
}
|
||||
|
||||
static void dump_dir_debug_dir(IMAGE_DEBUG_DIRECTORY* idd, int idx)
|
||||
static void dump_dir_debug_dir(const IMAGE_DEBUG_DIRECTORY* idd, int idx)
|
||||
{
|
||||
const char* str;
|
||||
|
||||
|
@ -682,7 +682,7 @@ static void dump_dir_debug_dir(IMAGE_DEBUG_DIRECTORY* idd, int idx)
|
|||
break;
|
||||
case IMAGE_DEBUG_TYPE_COFF:
|
||||
dump_coff(idd->PointerToRawData, idd->SizeOfData,
|
||||
(char*)PE_nt_headers + sizeof(DWORD) + sizeof(IMAGE_FILE_HEADER) + PE_nt_headers->FileHeader.SizeOfOptionalHeader);
|
||||
(const char*)PE_nt_headers + sizeof(DWORD) + sizeof(IMAGE_FILE_HEADER) + PE_nt_headers->FileHeader.SizeOfOptionalHeader);
|
||||
break;
|
||||
case IMAGE_DEBUG_TYPE_CODEVIEW:
|
||||
dump_codeview(idd->PointerToRawData, idd->SizeOfData);
|
||||
|
@ -692,7 +692,7 @@ static void dump_dir_debug_dir(IMAGE_DEBUG_DIRECTORY* idd, int idx)
|
|||
break;
|
||||
case IMAGE_DEBUG_TYPE_MISC:
|
||||
{
|
||||
IMAGE_DEBUG_MISC* misc = PRD(idd->PointerToRawData, idd->SizeOfData);
|
||||
const IMAGE_DEBUG_MISC* misc = PRD(idd->PointerToRawData, idd->SizeOfData);
|
||||
if (!misc) {printf("Can't get misc debug information\n"); break;}
|
||||
printf(" DataType: %lu (%s)\n",
|
||||
misc->DataType,
|
||||
|
@ -720,7 +720,7 @@ static void dump_dir_debug_dir(IMAGE_DEBUG_DIRECTORY* idd, int idx)
|
|||
|
||||
static void dump_dir_debug(void)
|
||||
{
|
||||
IMAGE_DEBUG_DIRECTORY* debugDir = get_dir(IMAGE_FILE_DEBUG_DIRECTORY);
|
||||
const IMAGE_DEBUG_DIRECTORY*debugDir = get_dir(IMAGE_FILE_DEBUG_DIRECTORY);
|
||||
unsigned nb_dbg, i;
|
||||
|
||||
if (!debugDir) return;
|
||||
|
@ -781,15 +781,16 @@ static void dump_dir_tls(void)
|
|||
|
||||
void dump_separate_dbg(void)
|
||||
{
|
||||
IMAGE_SEPARATE_DEBUG_HEADER*separateDebugHead = PRD(0, sizeof(separateDebugHead));
|
||||
unsigned nb_dbg;
|
||||
unsigned i;
|
||||
IMAGE_DEBUG_DIRECTORY* debugDir;
|
||||
const IMAGE_SEPARATE_DEBUG_HEADER* separateDebugHead;
|
||||
unsigned nb_dbg;
|
||||
unsigned i;
|
||||
const IMAGE_DEBUG_DIRECTORY* debugDir;
|
||||
|
||||
separateDebugHead = PRD(0, sizeof(separateDebugHead));
|
||||
if (!separateDebugHead) {printf("Can't grab the separate header, aborting\n"); return;}
|
||||
|
||||
printf ("Signature: %.2s (0x%4X)\n",
|
||||
(char*)&separateDebugHead->Signature, separateDebugHead->Signature);
|
||||
(const char*)&separateDebugHead->Signature, separateDebugHead->Signature);
|
||||
printf ("Flags: 0x%04X\n", separateDebugHead->Flags);
|
||||
printf ("Machine: 0x%04X (%s)\n",
|
||||
separateDebugHead->Machine, get_machine_str(separateDebugHead->Machine));
|
||||
|
@ -1075,7 +1076,7 @@ static void dump_dir_resource(void)
|
|||
printf( "\n\n" );
|
||||
}
|
||||
|
||||
void pe_dump(void* pmt)
|
||||
void pe_dump(const void* pmt)
|
||||
{
|
||||
int all = (globals.dumpsect != NULL) && strcmp(globals.dumpsect, "ALL") == 0;
|
||||
|
||||
|
@ -1086,7 +1087,7 @@ void pe_dump(void* pmt)
|
|||
{
|
||||
dump_pe_header();
|
||||
/* FIXME: should check ptr */
|
||||
dump_sections((char*)PE_nt_headers + sizeof(DWORD) +
|
||||
dump_sections((const char*)PE_nt_headers + sizeof(DWORD) +
|
||||
sizeof(IMAGE_FILE_HEADER) + PE_nt_headers->FileHeader.SizeOfOptionalHeader,
|
||||
PE_nt_headers->FileHeader.NumberOfSections);
|
||||
}
|
||||
|
@ -1153,13 +1154,13 @@ static void dll_close (void)
|
|||
}
|
||||
*/
|
||||
|
||||
static void do_grab_sym( enum FileSig sig, void* pmt )
|
||||
static void do_grab_sym( enum FileSig sig, const void* pmt )
|
||||
{
|
||||
IMAGE_EXPORT_DIRECTORY *exportDir;
|
||||
const IMAGE_EXPORT_DIRECTORY*exportDir;
|
||||
unsigned i, j;
|
||||
DWORD* pName;
|
||||
DWORD* pFunc;
|
||||
WORD* pOrdl;
|
||||
const DWORD* pName;
|
||||
const DWORD* pFunc;
|
||||
const WORD* pOrdl;
|
||||
const char* ptr;
|
||||
DWORD* map;
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
*/
|
||||
|
||||
extern void dump_codeview(unsigned long ptr, unsigned long len);
|
||||
extern void dump_coff(unsigned long coffbase, unsigned long len, void* sect_map);
|
||||
extern void dump_coff(unsigned long coffbase, unsigned long len, const void* sect_map);
|
||||
extern void dump_frame_pointer_omission(unsigned long base, unsigned long len);
|
||||
extern void dump_separate_dbg(void);
|
||||
extern void pe_dump(void*);
|
||||
extern void pe_dump(const void*);
|
||||
|
|
|
@ -225,10 +225,10 @@ char *str_toupper (char *str);
|
|||
/* file dumping functions */
|
||||
enum FileSig {SIG_UNKNOWN, SIG_DOS, SIG_PE, SIG_DBG, SIG_NE, SIG_LE, SIG_MDMP};
|
||||
|
||||
void* PRD(unsigned long prd, unsigned long len);
|
||||
unsigned long Offset(void* ptr);
|
||||
const void* PRD(unsigned long prd, unsigned long len);
|
||||
unsigned long Offset(const void* ptr);
|
||||
|
||||
typedef void (*file_dumper)(enum FileSig, void*);
|
||||
typedef void (*file_dumper)(enum FileSig, const void*);
|
||||
int dump_analysis(const char*, file_dumper, enum FileSig);
|
||||
|
||||
void dump_data( const unsigned char *ptr, unsigned int size, const char *prefix );
|
||||
|
|
Loading…
Reference in New Issue