OSDN Git Service

Update program identification, via configuration process.
[mingw/pexports.git] / pexports.h
index fabd15e..7f7e5d9 100644 (file)
 #define _pexports_h
 
 #include <stdio.h>
+#include <stdint.h>
 
 #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 */