Index: tools/winedump/pe.c =================================================================== RCS file: /home/wine/wine/tools/winedump/pe.c,v retrieving revision 1.31 diff -u -r1.31 pe.c --- tools/winedump/pe.c 15 Jan 2004 01:47:46 -0000 1.31 +++ tools/winedump/pe.c 11 Jul 2004 15:31:14 -0000 @@ -39,6 +39,8 @@ #endif #include +#include "wine/emu.h" + #define NONAMELESSUNION #define NONAMELESSSTRUCT #include "windef.h" @@ -164,16 +166,16 @@ fileHeader = &PE_nt_headers->FileHeader; printf(" Machine: %04X (%s)\n", - fileHeader->Machine, get_machine_str(fileHeader->Machine)); - printf(" Number of Sections: %d\n", fileHeader->NumberOfSections); + swap_word_from_le(fileHeader->Machine), get_machine_str(swap_word_from_le(fileHeader->Machine))); + printf(" Number of Sections: %d\n", swap_word_from_le(fileHeader->NumberOfSections)); printf(" TimeDateStamp: %08lX (%s) offset %lu\n", - fileHeader->TimeDateStamp, get_time_str(fileHeader->TimeDateStamp), + swap_dword_from_le(fileHeader->TimeDateStamp), get_time_str(swap_dword_from_le(fileHeader->TimeDateStamp)), Offset(&(fileHeader->TimeDateStamp))); - printf(" PointerToSymbolTable: %08lX\n", fileHeader->PointerToSymbolTable); - printf(" NumberOfSymbols: %08lX\n", fileHeader->NumberOfSymbols); - printf(" SizeOfOptionalHeader: %04X\n", fileHeader->SizeOfOptionalHeader); - printf(" Characteristics: %04X\n", fileHeader->Characteristics); -#define X(f,s) if (fileHeader->Characteristics & f) printf(" %s\n", s) + printf(" PointerToSymbolTable: %08lX\n", swap_dword_from_le(fileHeader->PointerToSymbolTable)); + printf(" NumberOfSymbols: %08lX\n", swap_dword_from_le(fileHeader->NumberOfSymbols)); + printf(" SizeOfOptionalHeader: %04X\n", swap_word_from_le(fileHeader->SizeOfOptionalHeader)); + printf(" Characteristics: %04X\n", swap_word_from_le(fileHeader->Characteristics)); +#define X(f,s) if (swap_word_from_le(fileHeader->Characteristics) & f) printf(" %s\n", s) X(IMAGE_FILE_RELOCS_STRIPPED, "RELOCS_STRIPPED"); X(IMAGE_FILE_EXECUTABLE_IMAGE, "EXECUTABLE_IMAGE"); X(IMAGE_FILE_LINE_NUMS_STRIPPED, "LINE_NUMS_STRIPPED"); @@ -191,41 +193,42 @@ /* hope we have the right size */ printf("Optional Header\n"); optionalHeader = &PE_nt_headers->OptionalHeader; + printf(" Magic 0x%-4X %u\n", - optionalHeader->Magic, optionalHeader->Magic); + swap_word_from_le(optionalHeader->Magic), swap_word_from_le(optionalHeader->Magic)); printf(" linker version %u.%02u\n", optionalHeader->MajorLinkerVersion, optionalHeader->MinorLinkerVersion); printf(" size of code 0x%-8lx %lu\n", - optionalHeader->SizeOfCode, optionalHeader->SizeOfCode); + swap_dword_from_le(optionalHeader->SizeOfCode), swap_dword_from_le(optionalHeader->SizeOfCode)); printf(" size of initialized data 0x%-8lx %lu\n", - optionalHeader->SizeOfInitializedData, optionalHeader->SizeOfInitializedData); + swap_dword_from_le(optionalHeader->SizeOfInitializedData), swap_dword_from_le(optionalHeader->SizeOfInitializedData)); printf(" size of uninitialized data 0x%-8lx %lu\n", - optionalHeader->SizeOfUninitializedData, optionalHeader->SizeOfUninitializedData); + swap_dword_from_le(optionalHeader->SizeOfUninitializedData), swap_dword_from_le(optionalHeader->SizeOfUninitializedData)); printf(" entrypoint RVA 0x%-8lx %lu\n", - optionalHeader->AddressOfEntryPoint, optionalHeader->AddressOfEntryPoint); + swap_dword_from_le(optionalHeader->AddressOfEntryPoint), swap_dword_from_le(optionalHeader->AddressOfEntryPoint)); printf(" base of code 0x%-8lx %lu\n", - optionalHeader->BaseOfCode, optionalHeader->BaseOfCode); + swap_dword_from_le(optionalHeader->BaseOfCode), swap_dword_from_le(optionalHeader->BaseOfCode)); printf(" base of data 0x%-8lX %lu\n", - optionalHeader->BaseOfData, optionalHeader->BaseOfData); + swap_dword_from_le(optionalHeader->BaseOfData), swap_dword_from_le(optionalHeader->BaseOfData)); printf(" image base 0x%-8lX %lu\n", - optionalHeader->ImageBase, optionalHeader->ImageBase); + swap_dword_from_le(optionalHeader->ImageBase), swap_dword_from_le(optionalHeader->ImageBase)); printf(" section align 0x%-8lx %lu\n", - optionalHeader->SectionAlignment, optionalHeader->SectionAlignment); + swap_dword_from_le(optionalHeader->SectionAlignment), swap_dword_from_le(optionalHeader->SectionAlignment)); printf(" file align 0x%-8lx %lu\n", - optionalHeader->FileAlignment, optionalHeader->FileAlignment); + swap_dword_from_le(optionalHeader->FileAlignment), swap_dword_from_le(optionalHeader->FileAlignment)); printf(" required OS version %u.%02u\n", - optionalHeader->MajorOperatingSystemVersion, optionalHeader->MinorOperatingSystemVersion); + swap_word_from_le(optionalHeader->MajorOperatingSystemVersion), swap_word_from_le(optionalHeader->MinorOperatingSystemVersion)); printf(" image version %u.%02u\n", - optionalHeader->MajorImageVersion, optionalHeader->MinorImageVersion); + swap_word_from_le(optionalHeader->MajorImageVersion), swap_word_from_le(optionalHeader->MinorImageVersion)); printf(" subsystem version %u.%02u\n", - optionalHeader->MajorSubsystemVersion, optionalHeader->MinorSubsystemVersion); - printf(" Win32 Version 0x%lX\n", optionalHeader->Win32VersionValue); + swap_word_from_le(optionalHeader->MajorSubsystemVersion), swap_word_from_le(optionalHeader->MinorSubsystemVersion)); + printf(" Win32 Version 0x%lX\n", swap_dword_from_le(optionalHeader->Win32VersionValue)); printf(" size of image 0x%-8lx %lu\n", - optionalHeader->SizeOfImage, optionalHeader->SizeOfImage); + swap_dword_from_le(optionalHeader->SizeOfImage), swap_dword_from_le(optionalHeader->SizeOfImage)); printf(" size of headers 0x%-8lx %lu\n", - optionalHeader->SizeOfHeaders, optionalHeader->SizeOfHeaders); - printf(" checksum 0x%lX\n", optionalHeader->CheckSum); - switch (optionalHeader->Subsystem) + swap_dword_from_le(optionalHeader->SizeOfHeaders),swap_dword_from_le( optionalHeader->SizeOfHeaders)); + printf(" checksum 0x%lX\n", swap_dword_from_le(optionalHeader->CheckSum)); + switch (swap_word_from_le(optionalHeader->Subsystem)) { default: case IMAGE_SUBSYSTEM_UNKNOWN: str = "Unknown"; break; @@ -235,28 +238,29 @@ case IMAGE_SUBSYSTEM_OS2_CUI: str = "OS/2 CUI"; break; case IMAGE_SUBSYSTEM_POSIX_CUI: str = "Posix CUI"; break; } - printf(" Subsystem 0x%X (%s)\n", optionalHeader->Subsystem, str); - printf(" DLL flags 0x%X\n", optionalHeader->DllCharacteristics); + printf(" Subsystem 0x%X (%s)\n", swap_word_from_le(optionalHeader->Subsystem), str); + printf(" DLL flags 0x%X\n", swap_word_from_le(optionalHeader->DllCharacteristics)); printf(" stack reserve size 0x%-8lx %lu\n", - optionalHeader->SizeOfStackReserve, optionalHeader->SizeOfStackReserve); + swap_dword_from_le(optionalHeader->SizeOfStackReserve), swap_dword_from_le(optionalHeader->SizeOfStackReserve)); printf(" stack commit size 0x%-8lx %lu\n", - optionalHeader->SizeOfStackCommit, optionalHeader->SizeOfStackCommit); + swap_dword_from_le(optionalHeader->SizeOfStackCommit), swap_dword_from_le(optionalHeader->SizeOfStackCommit)); printf(" heap reserve size 0x%-8lx %lu\n", - optionalHeader->SizeOfHeapReserve, optionalHeader->SizeOfHeapReserve); + swap_dword_from_le(optionalHeader->SizeOfHeapReserve), swap_dword_from_le(optionalHeader->SizeOfHeapReserve)); printf(" heap commit size 0x%-8lx %lu\n", - optionalHeader->SizeOfHeapCommit, optionalHeader->SizeOfHeapCommit); - printf(" loader flags 0x%lX\n", optionalHeader->LoaderFlags); - printf(" RVAs & sizes 0x%lX\n", optionalHeader->NumberOfRvaAndSizes); + swap_dword_from_le(optionalHeader->SizeOfHeapCommit), swap_dword_from_le(optionalHeader->SizeOfHeapCommit)); + printf(" loader flags 0x%lX\n", swap_dword_from_le(optionalHeader->LoaderFlags)); + printf(" RVAs & sizes 0x%lX\n", swap_dword_from_le(optionalHeader->NumberOfRvaAndSizes)); printf("\n"); printf("Data Directory\n"); - printf("%ld\n", optionalHeader->NumberOfRvaAndSizes * sizeof(IMAGE_DATA_DIRECTORY)); + printf("%ld\n", swap_dword_from_le(optionalHeader->NumberOfRvaAndSizes) * sizeof(IMAGE_DATA_DIRECTORY)); - for (i = 0; i < optionalHeader->NumberOfRvaAndSizes && i < 16; i++) + for (i = 0; i < swap_dword_from_le(optionalHeader->NumberOfRvaAndSizes) && i < 16; i++) { - printf(" %-12s rva: 0x%-8lX size: %8lu\n", - DirectoryNames[i], optionalHeader->DataDirectory[i].VirtualAddress, - optionalHeader->DataDirectory[i].Size); + printf(" %-12s rva: 0x%-8lX size: %8lu\n", + DirectoryNames[i], + swap_dword_from_le(optionalHeader->DataDirectory[i].VirtualAddress), + swap_dword_from_le(optionalHeader->DataDirectory[i].Size) ); } printf("\n"); } @@ -270,17 +274,17 @@ for (i = 0; i < num_sect; i++, sectHead++) { printf(" %02d %-8.8s VirtSize: %-8lu VirtAddr: %-8lu 0x%08lx\n", - i + 1, sectHead->Name, sectHead->Misc.VirtualSize, sectHead->VirtualAddress, - sectHead->VirtualAddress); + i + 1, sectHead->Name, swap_dword_from_le(sectHead->Misc.VirtualSize), swap_dword_from_le(sectHead->VirtualAddress), + swap_dword_from_le(sectHead->VirtualAddress)); printf(" raw data offs: %-8lu raw data size: %-8lu\n", - sectHead->PointerToRawData, sectHead->SizeOfRawData); + swap_dword_from_le(sectHead->PointerToRawData), swap_dword_from_le(sectHead->SizeOfRawData)); printf(" relocation offs: %-8lu relocations: %-8u\n", - sectHead->PointerToRelocations, sectHead->NumberOfRelocations); + swap_dword_from_le(sectHead->PointerToRelocations), swap_word_from_le(sectHead->NumberOfRelocations)); printf(" line # offs: %-8lu line #'s: %-8u\n", - sectHead->PointerToLinenumbers, sectHead->NumberOfLinenumbers); - printf(" characteristics: 0x%08lx\n", sectHead->Characteristics); + swap_dword_from_le(sectHead->PointerToLinenumbers), swap_word_from_le(sectHead->NumberOfLinenumbers)); + printf(" characteristics: 0x%08lx\n", swap_dword_from_le(sectHead->Characteristics)); printf(" "); -#define X(b,s) if (sectHead->Characteristics & b) printf(s " ") +#define X(b,s) if (swap_dword_from_le(sectHead->Characteristics) & b) printf(s " ") /* #define IMAGE_SCN_TYPE_REG 0x00000000 - Reserved */ /* #define IMAGE_SCN_TYPE_DSECT 0x00000001 - Reserved */ /* #define IMAGE_SCN_TYPE_NOLOAD 0x00000002 - Reserved */ @@ -959,8 +963,8 @@ dump_pe_header(); /* FIXME: should check ptr */ dump_sections((char*)PE_nt_headers + sizeof(DWORD) + - sizeof(IMAGE_FILE_HEADER) + PE_nt_headers->FileHeader.SizeOfOptionalHeader, - PE_nt_headers->FileHeader.NumberOfSections); + sizeof(IMAGE_FILE_HEADER) + swap_word_from_le(PE_nt_headers->FileHeader.SizeOfOptionalHeader), + swap_word_from_le(PE_nt_headers->FileHeader.NumberOfSections)); } else if (!globals.dumpsect) { @@ -997,24 +1001,25 @@ pw = PRD(0, sizeof(WORD)); if (!pw) {printf("Can't get main signature, aborting\n"); return 0;} - - switch (*pw) + + switch (swap_word_from_le(*pw)) { case IMAGE_DOS_SIGNATURE: sig = SIG_DOS; dh = PRD(0, sizeof(IMAGE_DOS_HEADER)); - if (dh && dh->e_lfanew >= sizeof(*dh)) /* reasonable DOS header ? */ + + if (dh && swap_dword_from_le(dh->e_lfanew) >= sizeof(*dh)) /* reasonable DOS header ? */ { /* the signature is the first DWORD */ - pdw = PRD(dh->e_lfanew, sizeof(DWORD)); + pdw = PRD(swap_dword_from_le(dh->e_lfanew), sizeof(DWORD)); if (pdw) { - if (*pdw == IMAGE_NT_SIGNATURE) + if (swap_dword_from_le(*pdw) == IMAGE_NT_SIGNATURE) { - PE_nt_headers = PRD(dh->e_lfanew, sizeof(DWORD)+sizeof(IMAGE_FILE_HEADER)); + PE_nt_headers = PRD(swap_dword_from_le(dh->e_lfanew), sizeof(DWORD)+sizeof(IMAGE_FILE_HEADER)); sig = SIG_PE; } - else if (*(WORD *)pdw == IMAGE_OS2_SIGNATURE) + else if ( swap_word_from_le(*(WORD *)pdw) == IMAGE_OS2_SIGNATURE) { sig = SIG_NE; }