ms_coff/
image.rs

1use zerocopy_derive::*;
2
3use crate::IMAGE_DLLCHARACTERISTICS;
4
5#[repr(C)]
6#[derive(
7    Clone,
8    Default,
9    Eq,
10    PartialEq,
11    Ord,
12    PartialOrd,
13    Hash,
14    IntoBytes,
15    FromBytes,
16    Immutable,
17    KnownLayout,
18)]
19pub struct IMAGE_FILE_HEADER {
20    pub machine: u16,
21    pub number_of_sections: u16,
22    pub time_date_stamp: u32,
23    pub pointer_to_symbol_table: u32,
24    pub number_of_symbols: u32,
25    pub size_of_optional_header: u16,
26    pub characteristics: u16,
27}
28
29#[repr(C)]
30#[derive(
31    Clone,
32    Default,
33    Eq,
34    PartialEq,
35    Ord,
36    PartialOrd,
37    Hash,
38    IntoBytes,
39    FromBytes,
40    Immutable,
41    KnownLayout,
42)]
43pub struct IMAGE_DATA_DIRECTORY {
44    pub virtual_address: u32,
45    pub size: u32,
46}
47
48pub const IMAGE_NUMBEROF_DIRECTORY_ENTRIES: usize = 16;
49
50#[repr(C)]
51#[derive(
52    Clone,
53    Default,
54    Eq,
55    PartialEq,
56    Ord,
57    PartialOrd,
58    Hash,
59    IntoBytes,
60    FromBytes,
61    Immutable,
62    KnownLayout,
63)]
64pub struct IMAGE_OPTIONAL_HEADER32 {
65    pub magic: u16,
66    pub major_linker_version: u8,
67    pub minor_linker_version: u8,
68    pub size_of_code: u32,
69    pub size_of_initialized_data: u32,
70    pub size_of_uninitialized_data: u32,
71    pub address_of_entry_point: u32,
72    pub base_of_code: u32,
73    pub base_of_data: u32,
74    pub image_base: u32,
75    pub section_alignment: u32,
76    pub file_alignment: u32,
77    pub major_operating_system_version: u16,
78    pub minor_operating_system_version: u16,
79    pub major_image_version: u16,
80    pub minor_image_version: u16,
81    pub major_subsystem_version: u16,
82    pub minor_subsystem_version: u16,
83    pub win32_version_value: u32,
84    pub size_of_image: u32,
85    pub size_of_headers: u32,
86    pub check_sum: u32,
87    pub subsystem: u16,
88    pub dll_characteristics: IMAGE_DLLCHARACTERISTICS,
89    pub size_of_stack_reserve: u32,
90    pub size_of_stack_commit: u32,
91    pub size_of_heap_reserve: u32,
92    pub size_of_heap_commit: u32,
93    pub loader_flags: u32,
94    pub number_of_rva_and_sizes: u32,
95    pub data_directory: [IMAGE_DATA_DIRECTORY; IMAGE_NUMBEROF_DIRECTORY_ENTRIES],
96}
97
98#[repr(C)]
99#[derive(
100    Clone,
101    Default,
102    Eq,
103    PartialEq,
104    Ord,
105    PartialOrd,
106    Hash,
107    IntoBytes,
108    FromBytes,
109    Immutable,
110    KnownLayout,
111)]
112pub struct IMAGE_OPTIONAL_HEADER64 {
113    pub magic: u16,
114    pub major_linker_version: u8,
115    pub minor_linker_version: u8,
116    pub size_of_code: u32,
117    pub size_of_initialized_data: u32,
118    pub size_of_uninitialized_data: u32,
119    pub address_of_entry_point: u32,
120    pub base_of_code: u32,
121    pub image_base: u64,
122    pub section_alignment: u32,
123    pub file_alignment: u32,
124    pub major_operating_system_version: u16,
125    pub minor_operating_system_version: u16,
126    pub major_image_version: u16,
127    pub minor_image_version: u16,
128    pub major_subsystem_version: u16,
129    pub minor_subsystem_version: u16,
130    pub win32_version_value: u32,
131    pub size_of_image: u32,
132    pub size_of_headers: u32,
133    pub check_sum: u32,
134    pub subsystem: u16,
135    pub dll_characteristics: IMAGE_DLLCHARACTERISTICS,
136    pub size_of_stack_reserve: u64,
137    pub size_of_stack_commit: u64,
138    pub size_of_heap_reserve: u64,
139    pub size_of_heap_commit: u64,
140    pub loader_flags: u32,
141    pub number_of_rva_and_sizes: u32,
142    pub data_directory: [IMAGE_DATA_DIRECTORY; IMAGE_NUMBEROF_DIRECTORY_ENTRIES],
143}
144
145pub const IMAGE_NT_OPTIONAL_HDR32_MAGIC: u16 = 0x10b;
146pub const IMAGE_NT_OPTIONAL_HDR64_MAGIC: u16 = 0x20b;
147pub const IMAGE_ROM_OPTIONAL_HDR_MAGIC: u16 = 0x107;
148
149pub struct IMAGE_NT_HEADERS64 {
150    pub signature: u32,
151    pub file_header: IMAGE_FILE_HEADER,
152    pub optional_header: IMAGE_OPTIONAL_HEADER64,
153}
154
155pub struct IMAGE_NT_HEADERS32 {
156    pub signature: u32,
157    pub file_header: IMAGE_FILE_HEADER,
158    pub optional_header: IMAGE_OPTIONAL_HEADER32,
159}
160
161pub struct IMAGE_ROM_OPTIONAL_HEADER {
162    pub magic: u16,
163    pub major_linker_version: u8,
164    pub minor_linker_version: u8,
165    pub size_of_code: u32,
166    pub size_of_initialized_data: u32,
167    pub size_of_uninitialized_data: u32,
168    pub address_of_entry_point: u32,
169    pub base_of_code: u32,
170    pub base_of_data: u32,
171    pub base_of_bss: u32,
172    pub gpr_mask: u32,
173    pub cpr_mask: [u32; 4],
174    pub gp_value: u32,
175}
176
177pub struct IMAGE_ROM_HEADERS {
178    pub file_header: IMAGE_FILE_HEADER,
179    pub optional_header: IMAGE_ROM_OPTIONAL_HEADER,
180}