2 pexports - a program to extract exported symbols from a Portable
5 Copyright (C) 1998 Anders Norlander
7 pexports is distributed under the GNU General Public License and
8 has absolutely NO WARRANTY.
10 pexports will work only on intel machines.
23 /* These are needed */
24 typedef unsigned short WORD;
25 typedef unsigned int DWORD;
26 typedef unsigned char BYTE;
29 #if defined(__MINGW32__) || defined(_MSC_VER)
30 typedef unsigned __int64 ULONGLONG;
32 typedef unsigned long long ULONGLONG;
35 typedef void* HMODULE;
37 typedef __int64 INT_PTR;
38 #define INT_PTR_FORMAT "I64d"
41 #define INT_PTR_FORMAT "d"
48 typedef struct _IMAGE_DATA_DIRECTORY {
51 } IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;
53 typedef struct _IMAGE_FILE_HEADER {
55 WORD NumberOfSections;
57 DWORD PointerToSymbolTable;
58 DWORD NumberOfSymbols;
59 WORD SizeOfOptionalHeader;
61 } IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
63 #define IMAGE_FILE_MACHINE_I386 0x014c
64 #define IMAGE_FILE_MACHINE_IA64 0x0200
65 #define IMAGE_FILE_MACHINE_AMD64 0x8664
67 typedef struct _IMAGE_OPTIONAL_HEADER32 {
69 BYTE MajorLinkerVersion;
70 BYTE MinorLinkerVersion;
72 DWORD SizeOfInitializedData;
73 DWORD SizeOfUninitializedData;
74 DWORD AddressOfEntryPoint;
78 DWORD SectionAlignment;
80 WORD MajorOperatingSystemVersion;
81 WORD MinorOperatingSystemVersion;
82 WORD MajorImageVersion;
83 WORD MinorImageVersion;
84 WORD MajorSubsystemVersion;
85 WORD MinorSubsystemVersion;
91 WORD DllCharacteristics;
92 DWORD SizeOfStackReserve;
93 DWORD SizeOfStackCommit;
94 DWORD SizeOfHeapReserve;
95 DWORD SizeOfHeapCommit;
97 DWORD NumberOfRvaAndSizes;
98 IMAGE_DATA_DIRECTORY DataDirectory[16];
99 } IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
101 typedef struct _IMAGE_OPTIONAL_HEADER64 {
103 BYTE MajorLinkerVersion;
104 BYTE MinorLinkerVersion;
106 DWORD SizeOfInitializedData;
107 DWORD SizeOfUninitializedData;
108 DWORD AddressOfEntryPoint;
111 DWORD SectionAlignment;
113 WORD MajorOperatingSystemVersion;
114 WORD MinorOperatingSystemVersion;
115 WORD MajorImageVersion;
116 WORD MinorImageVersion;
117 WORD MajorSubsystemVersion;
118 WORD MinorSubsystemVersion;
119 DWORD Win32VersionValue;
124 WORD DllCharacteristics;
125 ULONGLONG SizeOfStackReserve;
126 ULONGLONG SizeOfStackCommit;
127 ULONGLONG SizeOfHeapReserve;
128 ULONGLONG SizeOfHeapCommit;
130 DWORD NumberOfRvaAndSizes;
131 IMAGE_DATA_DIRECTORY DataDirectory[16];
132 } IMAGE_OPTIONAL_HEADER64, *PIMAGE_OPTIONAL_HEADER64;
134 typedef struct IMAGE_NT_HEADERS32 {
136 IMAGE_FILE_HEADER FileHeader;
137 IMAGE_OPTIONAL_HEADER32 OptionalHeader;
138 } IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
140 typedef struct _IMAGE_NT_HEADERS64 {
142 IMAGE_FILE_HEADER FileHeader;
143 IMAGE_OPTIONAL_HEADER64 OptionalHeader;
144 } IMAGE_NT_HEADERS64, *PIMAGE_NT_HEADERS64;
146 typedef struct _IMAGE_SECTION_HEADER {
149 DWORD PhysicalAddress;
152 DWORD VirtualAddress;
154 DWORD PointerToRawData;
155 DWORD PointerToRelocations;
156 DWORD PointerToLinenumbers;
157 WORD NumberOfRelocations;
158 WORD NumberOfLinenumbers;
159 DWORD Characteristics;
160 } IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
162 #define IMAGE_SCN_CNT_CODE 0x00000020
164 typedef struct _IMAGE_EXPORT_DIRECTORY {
165 DWORD Characteristics;
171 DWORD NumberOfFunctions;
173 DWORD AddressOfFunctions;
174 DWORD AddressOfNames;
175 DWORD AddressOfNameOrdinals;
176 } IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;
178 typedef struct _IMAGE_DOS_HEADER {
198 } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
200 PIMAGE_SECTION_HEADER
201 find_section(DWORD rva);
204 load_pe_image(const char *filename);
207 rva_to_ptr(DWORD rva);
210 dump_exports(DWORD exports_rva, DWORD exports_size);
212 #define ADD_FUNCTION(nm,n) str_tree_add(&symbols, nm, (void*)(INT_PTR)n)
213 extern str_tree *symbols;
215 #endif /* _pexports_h */