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.
20 #define FALSE (int32_t)(0)
21 #define TRUE (int32_t)(1)
24 typedef struct IMAGE_DATA_DIRECTORY {
25 uint32_t VirtualAddress;
27 } IMAGE_DATA_DIRECTORY;
29 typedef struct IMAGE_FILE_HEADER {
31 uint16_t NumberOfSections;
32 uint32_t TimeDateStamp;
33 uint32_t PointerToSymbolTable;
34 uint32_t NumberOfSymbols;
35 uint16_t SizeOfOptionalHeader;
36 uint16_t Characteristics;
39 #define IMAGE_FILE_MACHINE_I386 0x014c
40 #define IMAGE_FILE_MACHINE_IA64 0x0200
41 #define IMAGE_FILE_MACHINE_AMD64 0x8664
43 typedef struct IMAGE_OPTIONAL_HEADER32 {
45 uint8_t MajorLinkerVersion;
46 uint8_t MinorLinkerVersion;
48 uint32_t SizeOfInitializedData;
49 uint32_t SizeOfUninitializedData;
50 uint32_t AddressOfEntryPoint;
54 uint32_t SectionAlignment;
55 uint32_t FileAlignment;
56 uint16_t MajorOperatingSystemVersion;
57 uint16_t MinorOperatingSystemVersion;
58 uint16_t MajorImageVersion;
59 uint16_t MinorImageVersion;
60 uint16_t MajorSubsystemVersion;
61 uint16_t MinorSubsystemVersion;
64 uint32_t SizeOfHeaders;
67 uint16_t DllCharacteristics;
68 uint32_t SizeOfStackReserve;
69 uint32_t SizeOfStackCommit;
70 uint32_t SizeOfHeapReserve;
71 uint32_t SizeOfHeapCommit;
73 uint32_t NumberOfRvaAndSizes;
74 IMAGE_DATA_DIRECTORY DataDirectory[16];
75 } IMAGE_OPTIONAL_HEADER32;
77 typedef struct IMAGE_OPTIONAL_HEADER64 {
79 uint8_t MajorLinkerVersion;
80 uint8_t MinorLinkerVersion;
82 uint32_t SizeOfInitializedData;
83 uint32_t SizeOfUninitializedData;
84 uint32_t AddressOfEntryPoint;
87 uint32_t SectionAlignment;
88 uint32_t FileAlignment;
89 uint16_t MajorOperatingSystemVersion;
90 uint16_t MinorOperatingSystemVersion;
91 uint16_t MajorImageVersion;
92 uint16_t MinorImageVersion;
93 uint16_t MajorSubsystemVersion;
94 uint16_t MinorSubsystemVersion;
95 uint32_t Win32VersionValue;
97 uint32_t SizeOfHeaders;
100 uint16_t DllCharacteristics;
101 uint64_t SizeOfStackReserve;
102 uint64_t SizeOfStackCommit;
103 uint64_t SizeOfHeapReserve;
104 uint64_t SizeOfHeapCommit;
105 uint32_t LoaderFlags;
106 uint32_t NumberOfRvaAndSizes;
107 IMAGE_DATA_DIRECTORY DataDirectory[16];
108 } IMAGE_OPTIONAL_HEADER64;
110 typedef struct IMAGE_NT_HEADERS32 {
112 IMAGE_FILE_HEADER FileHeader;
113 IMAGE_OPTIONAL_HEADER32 OptionalHeader;
114 } IMAGE_NT_HEADERS32;
116 typedef struct IMAGE_NT_HEADERS64 {
118 IMAGE_FILE_HEADER FileHeader;
119 IMAGE_OPTIONAL_HEADER64 OptionalHeader;
120 } IMAGE_NT_HEADERS64;
122 typedef struct IMAGE_SECTION_HEADER {
125 uint32_t PhysicalAddress;
126 uint32_t VirtualSize;
128 uint32_t VirtualAddress;
129 uint32_t SizeOfRawData;
130 uint32_t PointerToRawData;
131 uint32_t PointerToRelocations;
132 uint32_t PointerToLinenumbers;
133 uint16_t NumberOfRelocations;
134 uint16_t NumberOfLinenumbers;
135 uint32_t Characteristics;
136 } IMAGE_SECTION_HEADER;
138 #define IMAGE_SCN_CNT_CODE 0x00000020
140 typedef struct IMAGE_EXPORT_DIRECTORY {
141 uint32_t Characteristics;
142 uint32_t TimeDateStamp;
143 uint16_t MajorVersion;
144 uint16_t MinorVersion;
147 uint32_t NumberOfFunctions;
148 uint32_t NumberOfNames;
149 uint32_t AddressOfFunctions;
150 uint32_t AddressOfNames;
151 uint32_t AddressOfNameOrdinals;
152 } IMAGE_EXPORT_DIRECTORY;
154 typedef struct IMAGE_DOS_HEADER {
176 IMAGE_SECTION_HEADER *find_section( uint32_t );
177 IMAGE_DOS_HEADER *load_pe_image( const char * );
179 void *rva_to_ptr( uint32_t );
180 void dump_exports( uint32_t, uint32_t );
182 #define ADD_FUNCTION(nm,n) str_tree_add(&symbols, nm, (void*)(intptr_t)(n))
183 extern str_tree *symbols;
185 #endif /* _pexports_h */