1 /* radare - LGPL - Copyright 2008-2013 nibble, xvilka */
2 
3 #undef TE_
4 #undef TE_Word
5 #undef TE_DWord
6 #undef TE_VWord
7 
8 #define TE_Word ut16
9 #define TE_DWord ut64
10 #define TE_VWord ut32
11 
12 #ifndef _INCLUDE_R_BIN_TE_SPECS_H_
13 #define _INCLUDE_R_BIN_TE_SPECS_H_
14 
15 #define TE_NAME_LENGTH    256
16 #define TE_STRING_LENGTH  256
17 
18 #define TE_IMAGE_FILE_MACHINE_UNKNOWN          0x0000
19 #define TE_IMAGE_FILE_MACHINE_ALPHA            0x0184
20 #define TE_IMAGE_FILE_MACHINE_ALPHA64          0x0284
21 #define TE_IMAGE_FILE_MACHINE_AM33             0x01d3
22 #define TE_IMAGE_FILE_MACHINE_AMD64            0x8664
23 #define TE_IMAGE_FILE_MACHINE_ARM              0x01c0
24 #define TE_IMAGE_FILE_MACHINE_AXP64            TE_IMAGE_FILE_MACHINE_ALPHA64
25 #define TE_IMAGE_FILE_MACHINE_CEE              0xc0ee
26 #define TE_IMAGE_FILE_MACHINE_CEF              0x0cef
27 #define TE_IMAGE_FILE_MACHINE_EBC              0x0ebc
28 #define TE_IMAGE_FILE_MACHINE_I386             0x014c
29 #define TE_IMAGE_FILE_MACHINE_IA64             0x0200
30 #define TE_IMAGE_FILE_MACHINE_M32R             0x9041
31 #define TE_IMAGE_FILE_MACHINE_M68K             0x0268
32 #define TE_IMAGE_FILE_MACHINE_MIPS16           0x0266
33 #define TE_IMAGE_FILE_MACHINE_MIPSFPU          0x0366
34 #define TE_IMAGE_FILE_MACHINE_MIPSFPU16        0x0466
35 #define TE_IMAGE_FILE_MACHINE_POWERPC          0x01f0
36 #define TE_IMAGE_FILE_MACHINE_POWERPCFP        0x01f1
37 #define TE_IMAGE_FILE_MACHINE_R10000           0x0168
38 #define TE_IMAGE_FILE_MACHINE_R3000            0x0162
39 #define TE_IMAGE_FILE_MACHINE_R4000            0x0166
40 #define TE_IMAGE_FILE_MACHINE_SH3              0x01a2
41 #define TE_IMAGE_FILE_MACHINE_SH3DSP           0x01a3
42 #define TE_IMAGE_FILE_MACHINE_SH3E             0x01a4
43 #define TE_IMAGE_FILE_MACHINE_SH4              0x01a6
44 #define TE_IMAGE_FILE_MACHINE_SH5              0x01a8
45 #define TE_IMAGE_FILE_MACHINE_THUMB            0x01c2
46 #define TE_IMAGE_FILE_MACHINE_TRICORE          0x0520
47 #define TE_IMAGE_FILE_MACHINE_WCEMIPSV2        0x0169
48 
49 #define TE_IMAGE_DIRECTORY_ENTRIES                  2
50 
51 #define TE_IMAGE_DIRECTORY_ENTRY_BASERELOC          0
52 #define TE_IMAGE_DIRECTORY_ENTRY_DEBUG              1
53 
54 #define TE_IMAGE_SUBSYSTEM_UNKNOWN                  0
55 #define TE_IMAGE_SUBSYSTEM_NATIVE                   1
56 #define TE_IMAGE_SUBSYSTEM_WINDOWS_GUI              2
57 #define TE_IMAGE_SUBSYSTEM_WINDOWS_CUI              3
58 #define TE_IMAGE_SUBSYSTEM_POSIX_CUI                7
59 #define TE_IMAGE_SUBSYSTEM_WINDOWS_CE_GUI           9
60 #define TE_IMAGE_SUBSYSTEM_EFI_APPLICATION         10
61 #define TE_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11
62 #define TE_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER      12
63 #define TE_IMAGE_SUBSYSTEM_EFI_ROM                 13
64 #define TE_IMAGE_SUBSYSTEM_XBOX                    14
65 
66 
67 typedef struct {
68 	ut32 VirtualAddress;
69 	ut32 Size;
70 } efi_image_data_directory;
71 
72 typedef struct {
73 	ut16 Signature;
74 	ut16 Machine;
75 	ut8 NumberOfSections;
76 	ut8 Subsystem;
77 	ut16 StrippedSize;
78 	ut32 AddressOfEntryPoint;
79 	ut32 BaseOfCode;
80 	ut64 ImageBase;
81 	efi_image_data_directory DataDirectory[2];
82 } TE_image_file_header;
83 
84 #define TE_IMAGE_SIZEOF_NAME 8
85 
86 #define TE_IMAGE_SCN_MEM_SHARED    0x10000000
87 #define TE_IMAGE_SCN_MEM_EXECUTE   0x20000000
88 #define TE_IMAGE_SCN_MEM_READ      0x40000000
89 #define TE_IMAGE_SCN_MEM_WRITE     0x80000000
90 
91 typedef struct {
92 	ut8  Name[TE_IMAGE_SIZEOF_NAME];
93 	ut32 VirtualSize;
94 	ut32 VirtualAddress;
95 	ut32 SizeOfRawData;
96 	ut32 PointerToRawData;
97 	ut32 PointerToRelocations;
98 	ut32 PointerToLineNumbers;
99 	ut16 NumberOfRelocations;
100 	ut16 NumberOfLinenumbers;
101 	ut32 Characteristics;
102 } TE_image_section_header;
103 
104 #endif
105