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.
22 #define FALSE (int32_t)(0)
23 #define TRUE (int32_t)(1)
26 typedef struct IMAGE_DATA_DIRECTORY {
27 uint32_t VirtualAddress;
29 } IMAGE_DATA_DIRECTORY;
31 typedef struct IMAGE_FILE_HEADER {
33 uint16_t NumberOfSections;
34 uint32_t TimeDateStamp;
35 uint32_t PointerToSymbolTable;
36 uint32_t NumberOfSymbols;
37 uint16_t SizeOfOptionalHeader;
38 uint16_t Characteristics;
41 #define IMAGE_FILE_MACHINE_I386 0x014c
42 #define IMAGE_FILE_MACHINE_IA64 0x0200
43 #define IMAGE_FILE_MACHINE_AMD64 0x8664
45 typedef struct IMAGE_OPTIONAL_HEADER32 {
47 uint8_t MajorLinkerVersion;
48 uint8_t MinorLinkerVersion;
50 uint32_t SizeOfInitializedData;
51 uint32_t SizeOfUninitializedData;
52 uint32_t AddressOfEntryPoint;
56 uint32_t SectionAlignment;
57 uint32_t FileAlignment;
58 uint16_t MajorOperatingSystemVersion;
59 uint16_t MinorOperatingSystemVersion;
60 uint16_t MajorImageVersion;
61 uint16_t MinorImageVersion;
62 uint16_t MajorSubsystemVersion;
63 uint16_t MinorSubsystemVersion;
66 uint32_t SizeOfHeaders;
69 uint16_t DllCharacteristics;
70 uint32_t SizeOfStackReserve;
71 uint32_t SizeOfStackCommit;
72 uint32_t SizeOfHeapReserve;
73 uint32_t SizeOfHeapCommit;
75 uint32_t NumberOfRvaAndSizes;
76 IMAGE_DATA_DIRECTORY DataDirectory[16];
77 } IMAGE_OPTIONAL_HEADER32;
79 typedef struct IMAGE_OPTIONAL_HEADER64 {
81 uint8_t MajorLinkerVersion;
82 uint8_t MinorLinkerVersion;
84 uint32_t SizeOfInitializedData;
85 uint32_t SizeOfUninitializedData;
86 uint32_t AddressOfEntryPoint;
89 uint32_t SectionAlignment;
90 uint32_t FileAlignment;
91 uint16_t MajorOperatingSystemVersion;
92 uint16_t MinorOperatingSystemVersion;
93 uint16_t MajorImageVersion;
94 uint16_t MinorImageVersion;
95 uint16_t MajorSubsystemVersion;
96 uint16_t MinorSubsystemVersion;
97 uint32_t Win32VersionValue;
99 uint32_t SizeOfHeaders;
102 uint16_t DllCharacteristics;
103 uint64_t SizeOfStackReserve;
104 uint64_t SizeOfStackCommit;
105 uint64_t SizeOfHeapReserve;
106 uint64_t SizeOfHeapCommit;
107 uint32_t LoaderFlags;
108 uint32_t NumberOfRvaAndSizes;
109 IMAGE_DATA_DIRECTORY DataDirectory[16];
110 } IMAGE_OPTIONAL_HEADER64;
112 typedef struct IMAGE_NT_HEADERS32 {
114 IMAGE_FILE_HEADER FileHeader;
115 IMAGE_OPTIONAL_HEADER32 OptionalHeader;
116 } IMAGE_NT_HEADERS32;
118 typedef struct IMAGE_NT_HEADERS64 {
120 IMAGE_FILE_HEADER FileHeader;
121 IMAGE_OPTIONAL_HEADER64 OptionalHeader;
122 } IMAGE_NT_HEADERS64;
124 typedef struct IMAGE_SECTION_HEADER {
127 uint32_t PhysicalAddress;
128 uint32_t VirtualSize;
130 uint32_t VirtualAddress;
131 uint32_t SizeOfRawData;
132 uint32_t PointerToRawData;
133 uint32_t PointerToRelocations;
134 uint32_t PointerToLinenumbers;
135 uint16_t NumberOfRelocations;
136 uint16_t NumberOfLinenumbers;
137 uint32_t Characteristics;
138 } IMAGE_SECTION_HEADER;
140 #define IMAGE_SCN_CNT_CODE 0x00000020
142 typedef struct IMAGE_EXPORT_DIRECTORY {
143 uint32_t Characteristics;
144 uint32_t TimeDateStamp;
145 uint16_t MajorVersion;
146 uint16_t MinorVersion;
149 uint32_t NumberOfFunctions;
150 uint32_t NumberOfNames;
151 uint32_t AddressOfFunctions;
152 uint32_t AddressOfNames;
153 uint32_t AddressOfNameOrdinals;
154 } IMAGE_EXPORT_DIRECTORY;
156 typedef struct IMAGE_DOS_HEADER {
178 IMAGE_SECTION_HEADER *find_section( uint32_t );
179 IMAGE_DOS_HEADER *load_pe_image( const char * );
181 void *rva_to_ptr( uint32_t );
182 void dump_exports( uint32_t, uint32_t );
184 #define ADD_FUNCTION(nm,n) str_tree_add(&symbols, nm, (void*)(intptr_t)(n))
185 extern str_tree *symbols;
187 #endif /* _pexports_h */