OSDN Git Service

Autoconfiscate.
[mingw/pexports.git] / pexports.h
1 /*
2  pexports - a program to extract exported symbols from a Portable
3  Executable (PE) file.
4
5  Copyright (C) 1998 Anders Norlander
6
7  pexports is distributed under the GNU General Public License and
8  has absolutely NO WARRANTY.
9
10  pexports will work only on intel machines.
11 */
12
13 #ifndef _pexports_h
14 #define _pexports_h
15
16 #include <stdio.h>
17 #include <stdint.h>
18
19 #include "str_tree.h"
20
21 #define VER_MAJOR 0
22 #define VER_MINOR 44
23
24 /* These are needed:
25  * FIXME: However, I'd really much prefer to see ISO-C99 standard
26  * types used throughout, in preference to these Micrsoft-inspired
27  * obfuscated typedefs.
28  */
29 typedef uint8_t  BYTE;
30 typedef uint16_t WORD;
31 typedef uint32_t DWORD;
32 typedef void* PVOID;
33 typedef int32_t LONG;
34 typedef uint64_t ULONGLONG;
35 typedef int BOOL;
36 typedef void* HMODULE;
37
38 #define FALSE 0
39 #define TRUE 1
40
41 /* PE structures */
42 typedef struct _IMAGE_DATA_DIRECTORY {
43   DWORD   VirtualAddress;
44   DWORD   Size;
45 } IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;
46
47 typedef struct _IMAGE_FILE_HEADER {
48   WORD    Machine;
49   WORD    NumberOfSections;
50   DWORD   TimeDateStamp;
51   DWORD   PointerToSymbolTable;
52   DWORD   NumberOfSymbols;
53   WORD    SizeOfOptionalHeader;
54   WORD    Characteristics;
55 } IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
56
57 #define IMAGE_FILE_MACHINE_I386  0x014c
58 #define IMAGE_FILE_MACHINE_IA64  0x0200
59 #define IMAGE_FILE_MACHINE_AMD64 0x8664
60
61 typedef struct _IMAGE_OPTIONAL_HEADER32 {
62   WORD    Magic;
63   BYTE    MajorLinkerVersion;
64   BYTE    MinorLinkerVersion;
65   DWORD   SizeOfCode;
66   DWORD   SizeOfInitializedData;
67   DWORD   SizeOfUninitializedData;
68   DWORD   AddressOfEntryPoint;
69   DWORD   BaseOfCode;
70   DWORD   BaseOfData;
71   DWORD   ImageBase;
72   DWORD   SectionAlignment;
73   DWORD   FileAlignment;
74   WORD    MajorOperatingSystemVersion;
75   WORD    MinorOperatingSystemVersion;
76   WORD    MajorImageVersion;
77   WORD    MinorImageVersion;
78   WORD    MajorSubsystemVersion;
79   WORD    MinorSubsystemVersion;
80   DWORD   Reserved1;
81   DWORD   SizeOfImage;
82   DWORD   SizeOfHeaders;
83   DWORD   CheckSum;
84   WORD    Subsystem;
85   WORD    DllCharacteristics;
86   DWORD   SizeOfStackReserve;
87   DWORD   SizeOfStackCommit;
88   DWORD   SizeOfHeapReserve;
89   DWORD   SizeOfHeapCommit;
90   DWORD   LoaderFlags;
91   DWORD   NumberOfRvaAndSizes;
92   IMAGE_DATA_DIRECTORY DataDirectory[16];
93 } IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
94
95 typedef struct _IMAGE_OPTIONAL_HEADER64 {
96   WORD    Magic;
97   BYTE    MajorLinkerVersion;
98   BYTE    MinorLinkerVersion;
99   DWORD   SizeOfCode;
100   DWORD   SizeOfInitializedData;
101   DWORD   SizeOfUninitializedData;
102   DWORD   AddressOfEntryPoint;
103   DWORD   BaseOfCode;
104   ULONGLONG ImageBase;
105   DWORD   SectionAlignment;
106   DWORD   FileAlignment;
107   WORD    MajorOperatingSystemVersion;
108   WORD    MinorOperatingSystemVersion;
109   WORD    MajorImageVersion;
110   WORD    MinorImageVersion;
111   WORD    MajorSubsystemVersion;
112   WORD    MinorSubsystemVersion;
113   DWORD   Win32VersionValue;
114   DWORD   SizeOfImage;
115   DWORD   SizeOfHeaders;
116   DWORD   CheckSum;
117   WORD    Subsystem;
118   WORD    DllCharacteristics;
119   ULONGLONG SizeOfStackReserve;
120   ULONGLONG SizeOfStackCommit;
121   ULONGLONG SizeOfHeapReserve;
122   ULONGLONG SizeOfHeapCommit;
123   DWORD   LoaderFlags;
124   DWORD   NumberOfRvaAndSizes;
125   IMAGE_DATA_DIRECTORY DataDirectory[16];
126 } IMAGE_OPTIONAL_HEADER64, *PIMAGE_OPTIONAL_HEADER64;
127
128 typedef struct IMAGE_NT_HEADERS32 {
129   char Signature[4];
130   IMAGE_FILE_HEADER FileHeader;
131   IMAGE_OPTIONAL_HEADER32 OptionalHeader;
132 } IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
133
134 typedef struct _IMAGE_NT_HEADERS64 {
135   char Signature[4];
136   IMAGE_FILE_HEADER FileHeader;
137   IMAGE_OPTIONAL_HEADER64 OptionalHeader;
138 } IMAGE_NT_HEADERS64, *PIMAGE_NT_HEADERS64;
139
140 typedef struct _IMAGE_SECTION_HEADER {
141   BYTE    Name[8];
142   union {
143     DWORD   PhysicalAddress;
144     DWORD   VirtualSize;
145   } Misc;
146   DWORD   VirtualAddress;
147   DWORD   SizeOfRawData;
148   DWORD   PointerToRawData;
149   DWORD   PointerToRelocations;
150   DWORD   PointerToLinenumbers;
151   WORD    NumberOfRelocations;
152   WORD    NumberOfLinenumbers;
153   DWORD   Characteristics;
154 } IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
155
156 #define IMAGE_SCN_CNT_CODE 0x00000020
157
158 typedef struct _IMAGE_EXPORT_DIRECTORY {
159   DWORD   Characteristics;
160   DWORD   TimeDateStamp;
161   WORD    MajorVersion;
162   WORD    MinorVersion;
163   DWORD   Name;
164   DWORD   Base;
165   DWORD   NumberOfFunctions;
166   DWORD   NumberOfNames;
167   DWORD   AddressOfFunctions;
168   DWORD   AddressOfNames;
169   DWORD   AddressOfNameOrdinals;
170 } IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;
171
172 typedef struct _IMAGE_DOS_HEADER {
173   WORD   e_magic;
174   WORD   e_cblp;
175   WORD   e_cp;   
176   WORD   e_crlc; 
177   WORD   e_cparhdr;
178   WORD   e_minalloc;
179   WORD   e_maxalloc;
180   WORD   e_ss;      
181   WORD   e_sp;      
182   WORD   e_csum;
183   WORD   e_ip;      
184   WORD   e_cs;      
185   WORD   e_lfarlc;  
186   WORD   e_ovno;    
187   WORD   e_res[4];  
188   WORD   e_oemid;   
189   WORD   e_oeminfo; 
190   WORD   e_res2[10];
191   LONG   e_lfanew;  
192 } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
193
194 PIMAGE_SECTION_HEADER
195 find_section(DWORD rva);
196
197 PIMAGE_DOS_HEADER
198 load_pe_image(const char *filename);
199
200 void *
201 rva_to_ptr(DWORD rva);
202
203 void
204 dump_exports(DWORD exports_rva, DWORD exports_size);
205
206 #define ADD_FUNCTION(nm,n) str_tree_add(&symbols, nm, (void*)(intptr_t)(n))
207 extern str_tree *symbols;
208
209 #endif /* _pexports_h */