X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=pexports.h;h=7f7e5d97c6b14fc1fefe30e35212e622c589e187;hb=a504d2bdc72fe19da5c04cdf1fc973d1cd1ae62c;hp=fabd15e4bf647e0ecd4adf2b457f6825d98693cb;hpb=907e82c0d82f2e86bf61b8bd098e3c837781496f;p=mingw%2Fpexports.git diff --git a/pexports.h b/pexports.h index fabd15e..7f7e5d9 100644 --- a/pexports.h +++ b/pexports.h @@ -14,19 +14,26 @@ #define _pexports_h #include +#include #include "str_tree.h" -#define VER_MAJOR 0 -#define VER_MINOR 43 - -/* These are needed */ -typedef unsigned short WORD; -typedef unsigned int DWORD; -typedef unsigned char BYTE; -typedef long LONG; -typedef WORD *PWORD; -typedef DWORD *PDWORD; +/* These are needed: + * FIXME: However, I'd really much prefer to see ISO-C99 standard + * types used throughout, in preference to these Micrsoft-inspired + * obfuscated typedefs. + */ +typedef uint8_t BYTE; +typedef uint16_t WORD; +typedef uint32_t DWORD; +typedef void* PVOID; +typedef int32_t LONG; +typedef uint64_t ULONGLONG; +typedef int BOOL; +typedef void* HMODULE; + +#define FALSE 0 +#define TRUE 1 /* PE structures */ typedef struct _IMAGE_DATA_DIRECTORY { @@ -44,7 +51,11 @@ typedef struct _IMAGE_FILE_HEADER { WORD Characteristics; } IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER; -typedef struct _IMAGE_OPTIONAL_HEADER { +#define IMAGE_FILE_MACHINE_I386 0x014c +#define IMAGE_FILE_MACHINE_IA64 0x0200 +#define IMAGE_FILE_MACHINE_AMD64 0x8664 + +typedef struct _IMAGE_OPTIONAL_HEADER32 { WORD Magic; BYTE MajorLinkerVersion; BYTE MinorLinkerVersion; @@ -54,7 +65,6 @@ typedef struct _IMAGE_OPTIONAL_HEADER { DWORD AddressOfEntryPoint; DWORD BaseOfCode; DWORD BaseOfData; - DWORD ImageBase; DWORD SectionAlignment; DWORD FileAlignment; @@ -77,14 +87,52 @@ typedef struct _IMAGE_OPTIONAL_HEADER { DWORD LoaderFlags; DWORD NumberOfRvaAndSizes; IMAGE_DATA_DIRECTORY DataDirectory[16]; -} IMAGE_OPTIONAL_HEADER, *PIMAGE_OPTIONAL_HEADER; +} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32; + +typedef struct _IMAGE_OPTIONAL_HEADER64 { + WORD Magic; + BYTE MajorLinkerVersion; + BYTE MinorLinkerVersion; + DWORD SizeOfCode; + DWORD SizeOfInitializedData; + DWORD SizeOfUninitializedData; + DWORD AddressOfEntryPoint; + DWORD BaseOfCode; + ULONGLONG ImageBase; + DWORD SectionAlignment; + DWORD FileAlignment; + WORD MajorOperatingSystemVersion; + WORD MinorOperatingSystemVersion; + WORD MajorImageVersion; + WORD MinorImageVersion; + WORD MajorSubsystemVersion; + WORD MinorSubsystemVersion; + DWORD Win32VersionValue; + DWORD SizeOfImage; + DWORD SizeOfHeaders; + DWORD CheckSum; + WORD Subsystem; + WORD DllCharacteristics; + ULONGLONG SizeOfStackReserve; + ULONGLONG SizeOfStackCommit; + ULONGLONG SizeOfHeapReserve; + ULONGLONG SizeOfHeapCommit; + DWORD LoaderFlags; + DWORD NumberOfRvaAndSizes; + IMAGE_DATA_DIRECTORY DataDirectory[16]; +} IMAGE_OPTIONAL_HEADER64, *PIMAGE_OPTIONAL_HEADER64; +typedef struct IMAGE_NT_HEADERS32 { + char Signature[4]; + IMAGE_FILE_HEADER FileHeader; + IMAGE_OPTIONAL_HEADER32 OptionalHeader; +} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32; -typedef struct _IMAGE_NT_HEADERS { +typedef struct _IMAGE_NT_HEADERS64 { char Signature[4]; IMAGE_FILE_HEADER FileHeader; - IMAGE_OPTIONAL_HEADER OptionalHeader; -} IMAGE_NT_HEADERS, *PIMAGE_NT_HEADERS; + IMAGE_OPTIONAL_HEADER64 OptionalHeader; +} IMAGE_NT_HEADERS64, *PIMAGE_NT_HEADERS64; typedef struct _IMAGE_SECTION_HEADER { BYTE Name[8]; @@ -102,6 +150,8 @@ typedef struct _IMAGE_SECTION_HEADER { DWORD Characteristics; } IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER; +#define IMAGE_SCN_CNT_CODE 0x00000020 + typedef struct _IMAGE_EXPORT_DIRECTORY { DWORD Characteristics; DWORD TimeDateStamp; @@ -111,9 +161,9 @@ typedef struct _IMAGE_EXPORT_DIRECTORY { DWORD Base; DWORD NumberOfFunctions; DWORD NumberOfNames; - PDWORD *AddressOfFunctions; - PDWORD *AddressOfNames; - PWORD *AddressOfNameOrdinals; + DWORD AddressOfFunctions; + DWORD AddressOfNames; + DWORD AddressOfNameOrdinals; } IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY; typedef struct _IMAGE_DOS_HEADER { @@ -144,20 +194,13 @@ find_section(DWORD rva); PIMAGE_DOS_HEADER load_pe_image(const char *filename); -DWORD +void * rva_to_ptr(DWORD rva); void -dump_exports(DWORD exports_rva); +dump_exports(DWORD exports_rva, DWORD exports_size); -#define ADD_FUNCTION(nm,n) str_tree_add(&symbols, nm, (void*)n) +#define ADD_FUNCTION(nm,n) str_tree_add(&symbols, nm, (void*)(intptr_t)(n)) extern str_tree *symbols; -/* pe.h from bfd */ - -/* dirty! */ -#define AOUTHDR int - -#include "pe.h" - #endif /* _pexports_h */