winedump: Constify some pointers.

This commit is contained in:
Eric Pouech 2006-04-10 20:53:50 +02:00 committed by Alexandre Julliard
parent 1e160c8418
commit 98783faaec
6 changed files with 144 additions and 143 deletions

View file

@ -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;

View file

@ -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;

View file

@ -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);

View file

@ -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;

View file

@ -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*);

View file

@ -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 );