1#![allow(missing_docs)]
9
10use core::convert::TryInto;
11
12use crate::endian::{I32Bytes, LittleEndian as LE, U16Bytes, U32Bytes, I32, U16, U32, U64};
13use crate::pod::Pod;
14
15pub const IMAGE_DOS_SIGNATURE: u16 = 0x5A4D;
17pub const IMAGE_OS2_SIGNATURE: u16 = 0x454E;
19pub const IMAGE_OS2_SIGNATURE_LE: u16 = 0x454C;
21pub const IMAGE_VXD_SIGNATURE: u16 = 0x454C;
23pub const IMAGE_NT_SIGNATURE: u32 = 0x0000_4550;
25
26#[derive(Debug, Clone, Copy)]
28#[repr(C)]
29pub struct ImageDosHeader {
30 pub e_magic: U16<LE>,
32 pub e_cblp: U16<LE>,
34 pub e_cp: U16<LE>,
36 pub e_crlc: U16<LE>,
38 pub e_cparhdr: U16<LE>,
40 pub e_minalloc: U16<LE>,
42 pub e_maxalloc: U16<LE>,
44 pub e_ss: U16<LE>,
46 pub e_sp: U16<LE>,
48 pub e_csum: U16<LE>,
50 pub e_ip: U16<LE>,
52 pub e_cs: U16<LE>,
54 pub e_lfarlc: U16<LE>,
56 pub e_ovno: U16<LE>,
58 pub e_res: [U16<LE>; 4],
60 pub e_oemid: U16<LE>,
62 pub e_oeminfo: U16<LE>,
64 pub e_res2: [U16<LE>; 10],
66 pub e_lfanew: U32<LE>,
68}
69
70#[derive(Debug, Clone, Copy)]
72#[repr(C)]
73pub struct ImageOs2Header {
74 pub ne_magic: U16<LE>,
76 pub ne_ver: i8,
78 pub ne_rev: i8,
80 pub ne_enttab: U16<LE>,
82 pub ne_cbenttab: U16<LE>,
84 pub ne_crc: I32<LE>,
86 pub ne_flags: U16<LE>,
88 pub ne_autodata: U16<LE>,
90 pub ne_heap: U16<LE>,
92 pub ne_stack: U16<LE>,
94 pub ne_csip: I32<LE>,
96 pub ne_sssp: I32<LE>,
98 pub ne_cseg: U16<LE>,
100 pub ne_cmod: U16<LE>,
102 pub ne_cbnrestab: U16<LE>,
104 pub ne_segtab: U16<LE>,
106 pub ne_rsrctab: U16<LE>,
108 pub ne_restab: U16<LE>,
110 pub ne_modtab: U16<LE>,
112 pub ne_imptab: U16<LE>,
114 pub ne_nrestab: I32<LE>,
116 pub ne_cmovent: U16<LE>,
118 pub ne_align: U16<LE>,
120 pub ne_cres: U16<LE>,
122 pub ne_exetyp: u8,
124 pub ne_flagsothers: u8,
126 pub ne_pretthunks: U16<LE>,
128 pub ne_psegrefbytes: U16<LE>,
130 pub ne_swaparea: U16<LE>,
132 pub ne_expver: U16<LE>,
134}
135
136#[derive(Debug, Clone, Copy)]
138#[repr(C)]
139pub struct ImageVxdHeader {
140 pub e32_magic: U16<LE>,
142 pub e32_border: u8,
144 pub e32_worder: u8,
146 pub e32_level: U32<LE>,
148 pub e32_cpu: U16<LE>,
150 pub e32_os: U16<LE>,
152 pub e32_ver: U32<LE>,
154 pub e32_mflags: U32<LE>,
156 pub e32_mpages: U32<LE>,
158 pub e32_startobj: U32<LE>,
160 pub e32_eip: U32<LE>,
162 pub e32_stackobj: U32<LE>,
164 pub e32_esp: U32<LE>,
166 pub e32_pagesize: U32<LE>,
168 pub e32_lastpagesize: U32<LE>,
170 pub e32_fixupsize: U32<LE>,
172 pub e32_fixupsum: U32<LE>,
174 pub e32_ldrsize: U32<LE>,
176 pub e32_ldrsum: U32<LE>,
178 pub e32_objtab: U32<LE>,
180 pub e32_objcnt: U32<LE>,
182 pub e32_objmap: U32<LE>,
184 pub e32_itermap: U32<LE>,
186 pub e32_rsrctab: U32<LE>,
188 pub e32_rsrccnt: U32<LE>,
190 pub e32_restab: U32<LE>,
192 pub e32_enttab: U32<LE>,
194 pub e32_dirtab: U32<LE>,
196 pub e32_dircnt: U32<LE>,
198 pub e32_fpagetab: U32<LE>,
200 pub e32_frectab: U32<LE>,
202 pub e32_impmod: U32<LE>,
204 pub e32_impmodcnt: U32<LE>,
206 pub e32_impproc: U32<LE>,
208 pub e32_pagesum: U32<LE>,
210 pub e32_datapage: U32<LE>,
212 pub e32_preload: U32<LE>,
214 pub e32_nrestab: U32<LE>,
216 pub e32_cbnrestab: U32<LE>,
218 pub e32_nressum: U32<LE>,
220 pub e32_autodata: U32<LE>,
222 pub e32_debuginfo: U32<LE>,
224 pub e32_debuglen: U32<LE>,
226 pub e32_instpreload: U32<LE>,
228 pub e32_instdemand: U32<LE>,
230 pub e32_heapsize: U32<LE>,
232 pub e32_res3: [u8; 12],
234 pub e32_winresoff: U32<LE>,
235 pub e32_winreslen: U32<LE>,
236 pub e32_devid: U16<LE>,
238 pub e32_ddkver: U16<LE>,
240}
241
242#[derive(Debug, Clone, Copy)]
251#[repr(C)]
252pub struct MaskedRichHeaderEntry {
253 pub masked_comp_id: U32<LE>,
254 pub masked_count: U32<LE>,
255}
256
257#[derive(Debug, Clone, Copy)]
262#[repr(C)]
263pub struct ImageFileHeader {
264 pub machine: U16<LE>,
265 pub number_of_sections: U16<LE>,
266 pub time_date_stamp: U32<LE>,
267 pub pointer_to_symbol_table: U32<LE>,
268 pub number_of_symbols: U32<LE>,
269 pub size_of_optional_header: U16<LE>,
270 pub characteristics: U16<LE>,
271}
272
273pub const IMAGE_SIZEOF_FILE_HEADER: usize = 20;
274
275pub const IMAGE_FILE_RELOCS_STRIPPED: u16 = 0x0001;
277pub const IMAGE_FILE_EXECUTABLE_IMAGE: u16 = 0x0002;
279pub const IMAGE_FILE_LINE_NUMS_STRIPPED: u16 = 0x0004;
281pub const IMAGE_FILE_LOCAL_SYMS_STRIPPED: u16 = 0x0008;
283pub const IMAGE_FILE_AGGRESIVE_WS_TRIM: u16 = 0x0010;
285pub const IMAGE_FILE_LARGE_ADDRESS_AWARE: u16 = 0x0020;
287pub const IMAGE_FILE_BYTES_REVERSED_LO: u16 = 0x0080;
289pub const IMAGE_FILE_32BIT_MACHINE: u16 = 0x0100;
291pub const IMAGE_FILE_DEBUG_STRIPPED: u16 = 0x0200;
293pub const IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP: u16 = 0x0400;
295pub const IMAGE_FILE_NET_RUN_FROM_SWAP: u16 = 0x0800;
297pub const IMAGE_FILE_SYSTEM: u16 = 0x1000;
299pub const IMAGE_FILE_DLL: u16 = 0x2000;
301pub const IMAGE_FILE_UP_SYSTEM_ONLY: u16 = 0x4000;
303pub const IMAGE_FILE_BYTES_REVERSED_HI: u16 = 0x8000;
305
306pub const IMAGE_FILE_MACHINE_UNKNOWN: u16 = 0;
307pub const IMAGE_FILE_MACHINE_TARGET_HOST: u16 = 0x0001;
309pub const IMAGE_FILE_MACHINE_I386: u16 = 0x014c;
311pub const IMAGE_FILE_MACHINE_R3000: u16 = 0x0162;
313pub const IMAGE_FILE_MACHINE_R4000: u16 = 0x0166;
315pub const IMAGE_FILE_MACHINE_R10000: u16 = 0x0168;
317pub const IMAGE_FILE_MACHINE_WCEMIPSV2: u16 = 0x0169;
319pub const IMAGE_FILE_MACHINE_ALPHA: u16 = 0x0184;
321pub const IMAGE_FILE_MACHINE_SH3: u16 = 0x01a2;
323pub const IMAGE_FILE_MACHINE_SH3DSP: u16 = 0x01a3;
324pub const IMAGE_FILE_MACHINE_SH3E: u16 = 0x01a4;
326pub const IMAGE_FILE_MACHINE_SH4: u16 = 0x01a6;
328pub const IMAGE_FILE_MACHINE_SH5: u16 = 0x01a8;
330pub const IMAGE_FILE_MACHINE_ARM: u16 = 0x01c0;
332pub const IMAGE_FILE_MACHINE_THUMB: u16 = 0x01c2;
334pub const IMAGE_FILE_MACHINE_ARMNT: u16 = 0x01c4;
336pub const IMAGE_FILE_MACHINE_AM33: u16 = 0x01d3;
337pub const IMAGE_FILE_MACHINE_POWERPC: u16 = 0x01F0;
339pub const IMAGE_FILE_MACHINE_POWERPCFP: u16 = 0x01f1;
340pub const IMAGE_FILE_MACHINE_IA64: u16 = 0x0200;
342pub const IMAGE_FILE_MACHINE_MIPS16: u16 = 0x0266;
344pub const IMAGE_FILE_MACHINE_ALPHA64: u16 = 0x0284;
346pub const IMAGE_FILE_MACHINE_MIPSFPU: u16 = 0x0366;
348pub const IMAGE_FILE_MACHINE_MIPSFPU16: u16 = 0x0466;
350pub const IMAGE_FILE_MACHINE_AXP64: u16 = IMAGE_FILE_MACHINE_ALPHA64;
351pub const IMAGE_FILE_MACHINE_TRICORE: u16 = 0x0520;
353pub const IMAGE_FILE_MACHINE_CEF: u16 = 0x0CEF;
354pub const IMAGE_FILE_MACHINE_EBC: u16 = 0x0EBC;
356pub const IMAGE_FILE_MACHINE_AMD64: u16 = 0x8664;
358pub const IMAGE_FILE_MACHINE_M32R: u16 = 0x9041;
360pub const IMAGE_FILE_MACHINE_ARM64: u16 = 0xAA64;
362pub const IMAGE_FILE_MACHINE_ARM64EC: u16 = 0xA641;
364pub const IMAGE_FILE_MACHINE_CEE: u16 = 0xC0EE;
365pub const IMAGE_FILE_MACHINE_RISCV32: u16 = 0x5032;
367pub const IMAGE_FILE_MACHINE_RISCV64: u16 = 0x5064;
369pub const IMAGE_FILE_MACHINE_RISCV128: u16 = 0x5128;
371pub const IMAGE_FILE_MACHINE_ARM64X: u16 = 0xA64E;
373pub const IMAGE_FILE_MACHINE_CHPE_X86: u16 = 0x3A64;
375
376#[derive(Debug, Clone, Copy)]
381#[repr(C)]
382pub struct ImageDataDirectory {
383 pub virtual_address: U32<LE>,
384 pub size: U32<LE>,
385}
386
387pub const IMAGE_NUMBEROF_DIRECTORY_ENTRIES: usize = 16;
388
389#[derive(Debug, Clone, Copy)]
394#[repr(C)]
395pub struct ImageOptionalHeader32 {
396 pub magic: U16<LE>,
398 pub major_linker_version: u8,
399 pub minor_linker_version: u8,
400 pub size_of_code: U32<LE>,
401 pub size_of_initialized_data: U32<LE>,
402 pub size_of_uninitialized_data: U32<LE>,
403 pub address_of_entry_point: U32<LE>,
404 pub base_of_code: U32<LE>,
405 pub base_of_data: U32<LE>,
406
407 pub image_base: U32<LE>,
409 pub section_alignment: U32<LE>,
410 pub file_alignment: U32<LE>,
411 pub major_operating_system_version: U16<LE>,
412 pub minor_operating_system_version: U16<LE>,
413 pub major_image_version: U16<LE>,
414 pub minor_image_version: U16<LE>,
415 pub major_subsystem_version: U16<LE>,
416 pub minor_subsystem_version: U16<LE>,
417 pub win32_version_value: U32<LE>,
418 pub size_of_image: U32<LE>,
419 pub size_of_headers: U32<LE>,
420 pub check_sum: U32<LE>,
421 pub subsystem: U16<LE>,
422 pub dll_characteristics: U16<LE>,
423 pub size_of_stack_reserve: U32<LE>,
424 pub size_of_stack_commit: U32<LE>,
425 pub size_of_heap_reserve: U32<LE>,
426 pub size_of_heap_commit: U32<LE>,
427 pub loader_flags: U32<LE>,
428 pub number_of_rva_and_sizes: U32<LE>,
429 }
431
432#[derive(Debug, Clone, Copy)]
433#[repr(C)]
434pub struct ImageRomOptionalHeader {
435 pub magic: U16<LE>,
436 pub major_linker_version: u8,
437 pub minor_linker_version: u8,
438 pub size_of_code: U32<LE>,
439 pub size_of_initialized_data: U32<LE>,
440 pub size_of_uninitialized_data: U32<LE>,
441 pub address_of_entry_point: U32<LE>,
442 pub base_of_code: U32<LE>,
443 pub base_of_data: U32<LE>,
444 pub base_of_bss: U32<LE>,
445 pub gpr_mask: U32<LE>,
446 pub cpr_mask: [U32<LE>; 4],
447 pub gp_value: U32<LE>,
448}
449
450#[derive(Debug, Clone, Copy)]
451#[repr(C)]
452pub struct ImageOptionalHeader64 {
453 pub magic: U16<LE>,
454 pub major_linker_version: u8,
455 pub minor_linker_version: u8,
456 pub size_of_code: U32<LE>,
457 pub size_of_initialized_data: U32<LE>,
458 pub size_of_uninitialized_data: U32<LE>,
459 pub address_of_entry_point: U32<LE>,
460 pub base_of_code: U32<LE>,
461 pub image_base: U64<LE>,
462 pub section_alignment: U32<LE>,
463 pub file_alignment: U32<LE>,
464 pub major_operating_system_version: U16<LE>,
465 pub minor_operating_system_version: U16<LE>,
466 pub major_image_version: U16<LE>,
467 pub minor_image_version: U16<LE>,
468 pub major_subsystem_version: U16<LE>,
469 pub minor_subsystem_version: U16<LE>,
470 pub win32_version_value: U32<LE>,
471 pub size_of_image: U32<LE>,
472 pub size_of_headers: U32<LE>,
473 pub check_sum: U32<LE>,
474 pub subsystem: U16<LE>,
475 pub dll_characteristics: U16<LE>,
476 pub size_of_stack_reserve: U64<LE>,
477 pub size_of_stack_commit: U64<LE>,
478 pub size_of_heap_reserve: U64<LE>,
479 pub size_of_heap_commit: U64<LE>,
480 pub loader_flags: U32<LE>,
481 pub number_of_rva_and_sizes: U32<LE>,
482 }
484
485pub const IMAGE_NT_OPTIONAL_HDR32_MAGIC: u16 = 0x10b;
486pub const IMAGE_NT_OPTIONAL_HDR64_MAGIC: u16 = 0x20b;
487pub const IMAGE_ROM_OPTIONAL_HDR_MAGIC: u16 = 0x107;
488
489#[derive(Debug, Clone, Copy)]
490#[repr(C)]
491pub struct ImageNtHeaders64 {
492 pub signature: U32<LE>,
493 pub file_header: ImageFileHeader,
494 pub optional_header: ImageOptionalHeader64,
495}
496
497#[derive(Debug, Clone, Copy)]
498#[repr(C)]
499pub struct ImageNtHeaders32 {
500 pub signature: U32<LE>,
501 pub file_header: ImageFileHeader,
502 pub optional_header: ImageOptionalHeader32,
503}
504
505#[derive(Debug, Clone, Copy)]
506#[repr(C)]
507pub struct ImageRomHeaders {
508 pub file_header: ImageFileHeader,
509 pub optional_header: ImageRomOptionalHeader,
510}
511
512pub const IMAGE_SUBSYSTEM_UNKNOWN: u16 = 0;
516pub const IMAGE_SUBSYSTEM_NATIVE: u16 = 1;
518pub const IMAGE_SUBSYSTEM_WINDOWS_GUI: u16 = 2;
520pub const IMAGE_SUBSYSTEM_WINDOWS_CUI: u16 = 3;
522pub const IMAGE_SUBSYSTEM_OS2_CUI: u16 = 5;
524pub const IMAGE_SUBSYSTEM_POSIX_CUI: u16 = 7;
526pub const IMAGE_SUBSYSTEM_NATIVE_WINDOWS: u16 = 8;
528pub const IMAGE_SUBSYSTEM_WINDOWS_CE_GUI: u16 = 9;
530pub const IMAGE_SUBSYSTEM_EFI_APPLICATION: u16 = 10;
531pub const IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER: u16 = 11;
532pub const IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER: u16 = 12;
533pub const IMAGE_SUBSYSTEM_EFI_ROM: u16 = 13;
534pub const IMAGE_SUBSYSTEM_XBOX: u16 = 14;
535pub const IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION: u16 = 16;
536pub const IMAGE_SUBSYSTEM_XBOX_CODE_CATALOG: u16 = 17;
537
538pub const IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA: u16 = 0x0020;
546pub const IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE: u16 = 0x0040;
548pub const IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY: u16 = 0x0080;
550pub const IMAGE_DLLCHARACTERISTICS_NX_COMPAT: u16 = 0x0100;
552pub const IMAGE_DLLCHARACTERISTICS_NO_ISOLATION: u16 = 0x0200;
554pub const IMAGE_DLLCHARACTERISTICS_NO_SEH: u16 = 0x0400;
556pub const IMAGE_DLLCHARACTERISTICS_NO_BIND: u16 = 0x0800;
558pub const IMAGE_DLLCHARACTERISTICS_APPCONTAINER: u16 = 0x1000;
560pub const IMAGE_DLLCHARACTERISTICS_WDM_DRIVER: u16 = 0x2000;
562pub const IMAGE_DLLCHARACTERISTICS_GUARD_CF: u16 = 0x4000;
564pub const IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE: u16 = 0x8000;
565
566pub const IMAGE_DIRECTORY_ENTRY_EXPORT: usize = 0;
570pub const IMAGE_DIRECTORY_ENTRY_IMPORT: usize = 1;
572pub const IMAGE_DIRECTORY_ENTRY_RESOURCE: usize = 2;
574pub const IMAGE_DIRECTORY_ENTRY_EXCEPTION: usize = 3;
576pub const IMAGE_DIRECTORY_ENTRY_SECURITY: usize = 4;
578pub const IMAGE_DIRECTORY_ENTRY_BASERELOC: usize = 5;
580pub const IMAGE_DIRECTORY_ENTRY_DEBUG: usize = 6;
582pub const IMAGE_DIRECTORY_ENTRY_ARCHITECTURE: usize = 7;
585pub const IMAGE_DIRECTORY_ENTRY_GLOBALPTR: usize = 8;
587pub const IMAGE_DIRECTORY_ENTRY_TLS: usize = 9;
589pub const IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG: usize = 10;
591pub const IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT: usize = 11;
593pub const IMAGE_DIRECTORY_ENTRY_IAT: usize = 12;
595pub const IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT: usize = 13;
597pub const IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR: usize = 14;
599
600#[derive(Debug, Clone, Copy, PartialEq, Eq)]
601#[repr(C)]
602pub struct Guid(pub [u8; 16]);
603
604impl Guid {
605 #[inline]
606 pub fn data1(self) -> U32<LE> {
607 U32::from_bytes(self.0[0..4].try_into().unwrap())
608 }
609
610 #[inline]
611 pub fn data2(self) -> U16<LE> {
612 U16::from_bytes(self.0[4..6].try_into().unwrap())
613 }
614
615 #[inline]
616 pub fn data3(self) -> U16<LE> {
617 U16::from_bytes(self.0[6..8].try_into().unwrap())
618 }
619
620 #[inline]
621 pub fn data4(self) -> [u8; 8] {
622 self.0[8..16].try_into().unwrap()
623 }
624}
625
626pub use Guid as ClsId;
627
628#[derive(Debug, Clone, Copy)]
630#[repr(C)]
631pub struct AnonObjectHeader {
632 pub sig1: U16<LE>,
634 pub sig2: U16<LE>,
636 pub version: U16<LE>,
638 pub machine: U16<LE>,
639 pub time_date_stamp: U32<LE>,
640 pub class_id: ClsId,
642 pub size_of_data: U32<LE>,
644}
645
646#[derive(Debug, Clone, Copy)]
647#[repr(C)]
648pub struct AnonObjectHeaderV2 {
649 pub sig1: U16<LE>,
651 pub sig2: U16<LE>,
653 pub version: U16<LE>,
655 pub machine: U16<LE>,
656 pub time_date_stamp: U32<LE>,
657 pub class_id: ClsId,
659 pub size_of_data: U32<LE>,
661 pub flags: U32<LE>,
663 pub meta_data_size: U32<LE>,
665 pub meta_data_offset: U32<LE>,
667}
668
669pub const ANON_OBJECT_HEADER_BIGOBJ_CLASS_ID: ClsId = ClsId([
671 0xC7, 0xA1, 0xBA, 0xD1, 0xEE, 0xBA, 0xA9, 0x4B, 0xAF, 0x20, 0xFA, 0xF6, 0x6A, 0xA4, 0xDC, 0xB8,
672]);
673
674#[derive(Debug, Clone, Copy)]
675#[repr(C)]
676pub struct AnonObjectHeaderBigobj {
677 pub sig1: U16<LE>,
680 pub sig2: U16<LE>,
682 pub version: U16<LE>,
684 pub machine: U16<LE>,
686 pub time_date_stamp: U32<LE>,
687 pub class_id: ClsId,
689 pub size_of_data: U32<LE>,
691 pub flags: U32<LE>,
693 pub meta_data_size: U32<LE>,
695 pub meta_data_offset: U32<LE>,
697
698 pub number_of_sections: U32<LE>,
701 pub pointer_to_symbol_table: U32<LE>,
702 pub number_of_symbols: U32<LE>,
703}
704
705pub const IMAGE_SIZEOF_SHORT_NAME: usize = 8;
706
707#[derive(Debug, Default, Clone, Copy)]
712#[repr(C)]
713pub struct ImageSectionHeader {
714 pub name: [u8; IMAGE_SIZEOF_SHORT_NAME],
715 pub virtual_size: U32<LE>,
716 pub virtual_address: U32<LE>,
717 pub size_of_raw_data: U32<LE>,
718 pub pointer_to_raw_data: U32<LE>,
719 pub pointer_to_relocations: U32<LE>,
720 pub pointer_to_linenumbers: U32<LE>,
721 pub number_of_relocations: U16<LE>,
722 pub number_of_linenumbers: U16<LE>,
723 pub characteristics: U32<LE>,
724}
725
726pub const IMAGE_SIZEOF_SECTION_HEADER: usize = 40;
727
728pub const IMAGE_SCN_TYPE_NO_PAD: u32 = 0x0000_0008;
736pub const IMAGE_SCN_CNT_CODE: u32 = 0x0000_0020;
740pub const IMAGE_SCN_CNT_INITIALIZED_DATA: u32 = 0x0000_0040;
742pub const IMAGE_SCN_CNT_UNINITIALIZED_DATA: u32 = 0x0000_0080;
744
745pub const IMAGE_SCN_LNK_OTHER: u32 = 0x0000_0100;
747pub const IMAGE_SCN_LNK_INFO: u32 = 0x0000_0200;
749pub const IMAGE_SCN_LNK_REMOVE: u32 = 0x0000_0800;
752pub const IMAGE_SCN_LNK_COMDAT: u32 = 0x0000_1000;
754pub const IMAGE_SCN_NO_DEFER_SPEC_EXC: u32 = 0x0000_4000;
758pub const IMAGE_SCN_GPREL: u32 = 0x0000_8000;
760pub const IMAGE_SCN_MEM_FARDATA: u32 = 0x0000_8000;
761pub const IMAGE_SCN_MEM_PURGEABLE: u32 = 0x0002_0000;
763pub const IMAGE_SCN_MEM_16BIT: u32 = 0x0002_0000;
764pub const IMAGE_SCN_MEM_LOCKED: u32 = 0x0004_0000;
765pub const IMAGE_SCN_MEM_PRELOAD: u32 = 0x0008_0000;
766
767pub const IMAGE_SCN_ALIGN_1BYTES: u32 = 0x0010_0000;
768pub const IMAGE_SCN_ALIGN_2BYTES: u32 = 0x0020_0000;
769pub const IMAGE_SCN_ALIGN_4BYTES: u32 = 0x0030_0000;
770pub const IMAGE_SCN_ALIGN_8BYTES: u32 = 0x0040_0000;
771pub const IMAGE_SCN_ALIGN_16BYTES: u32 = 0x0050_0000;
773pub const IMAGE_SCN_ALIGN_32BYTES: u32 = 0x0060_0000;
774pub const IMAGE_SCN_ALIGN_64BYTES: u32 = 0x0070_0000;
775pub const IMAGE_SCN_ALIGN_128BYTES: u32 = 0x0080_0000;
776pub const IMAGE_SCN_ALIGN_256BYTES: u32 = 0x0090_0000;
777pub const IMAGE_SCN_ALIGN_512BYTES: u32 = 0x00A0_0000;
778pub const IMAGE_SCN_ALIGN_1024BYTES: u32 = 0x00B0_0000;
779pub const IMAGE_SCN_ALIGN_2048BYTES: u32 = 0x00C0_0000;
780pub const IMAGE_SCN_ALIGN_4096BYTES: u32 = 0x00D0_0000;
781pub const IMAGE_SCN_ALIGN_8192BYTES: u32 = 0x00E0_0000;
782pub const IMAGE_SCN_ALIGN_MASK: u32 = 0x00F0_0000;
784
785pub const IMAGE_SCN_LNK_NRELOC_OVFL: u32 = 0x0100_0000;
787pub const IMAGE_SCN_MEM_DISCARDABLE: u32 = 0x0200_0000;
789pub const IMAGE_SCN_MEM_NOT_CACHED: u32 = 0x0400_0000;
791pub const IMAGE_SCN_MEM_NOT_PAGED: u32 = 0x0800_0000;
793pub const IMAGE_SCN_MEM_SHARED: u32 = 0x1000_0000;
795pub const IMAGE_SCN_MEM_EXECUTE: u32 = 0x2000_0000;
797pub const IMAGE_SCN_MEM_READ: u32 = 0x4000_0000;
799pub const IMAGE_SCN_MEM_WRITE: u32 = 0x8000_0000;
801
802pub const IMAGE_SCN_SCALE_INDEX: u32 = 0x0000_0001;
807
808#[derive(Debug, Clone, Copy)]
814#[repr(C)]
815pub struct ImageSymbol {
816 pub name: [u8; 8],
818 pub value: U32Bytes<LE>,
819 pub section_number: U16Bytes<LE>,
820 pub typ: U16Bytes<LE>,
821 pub storage_class: u8,
822 pub number_of_aux_symbols: u8,
823}
824
825pub const IMAGE_SIZEOF_SYMBOL: usize = 18;
826
827#[derive(Debug, Clone, Copy)]
828#[repr(C)]
829pub struct ImageSymbolBytes(pub [u8; IMAGE_SIZEOF_SYMBOL]);
830
831#[derive(Debug, Clone, Copy)]
833#[repr(C)]
834pub struct ImageSymbolEx {
835 pub name: [u8; 8],
837 pub value: U32Bytes<LE>,
838 pub section_number: I32Bytes<LE>,
839 pub typ: U16Bytes<LE>,
840 pub storage_class: u8,
841 pub number_of_aux_symbols: u8,
842}
843
844pub const IMAGE_SIZEOF_SYMBOL_EX: usize = 20;
845
846#[derive(Debug, Clone, Copy)]
847#[repr(C)]
848pub struct ImageSymbolExBytes(pub [u8; IMAGE_SIZEOF_SYMBOL_EX]);
849
850pub const IMAGE_SYM_UNDEFINED: i32 = 0;
857pub const IMAGE_SYM_ABSOLUTE: i32 = -1;
859pub const IMAGE_SYM_DEBUG: i32 = -2;
861pub const IMAGE_SYM_SECTION_MAX: u16 = 0xFEFF;
863pub const IMAGE_SYM_SECTION_MAX_EX: u32 = 0x7fff_ffff;
864
865pub const IMAGE_SYM_TYPE_NULL: u16 = 0x0000;
869pub const IMAGE_SYM_TYPE_VOID: u16 = 0x0001;
870pub const IMAGE_SYM_TYPE_CHAR: u16 = 0x0002;
872pub const IMAGE_SYM_TYPE_SHORT: u16 = 0x0003;
874pub const IMAGE_SYM_TYPE_INT: u16 = 0x0004;
875pub const IMAGE_SYM_TYPE_LONG: u16 = 0x0005;
876pub const IMAGE_SYM_TYPE_FLOAT: u16 = 0x0006;
877pub const IMAGE_SYM_TYPE_DOUBLE: u16 = 0x0007;
878pub const IMAGE_SYM_TYPE_STRUCT: u16 = 0x0008;
879pub const IMAGE_SYM_TYPE_UNION: u16 = 0x0009;
880pub const IMAGE_SYM_TYPE_ENUM: u16 = 0x000A;
882pub const IMAGE_SYM_TYPE_MOE: u16 = 0x000B;
884pub const IMAGE_SYM_TYPE_BYTE: u16 = 0x000C;
885pub const IMAGE_SYM_TYPE_WORD: u16 = 0x000D;
886pub const IMAGE_SYM_TYPE_UINT: u16 = 0x000E;
887pub const IMAGE_SYM_TYPE_DWORD: u16 = 0x000F;
888pub const IMAGE_SYM_TYPE_PCODE: u16 = 0x8000;
889
890pub const IMAGE_SYM_DTYPE_NULL: u16 = 0;
894pub const IMAGE_SYM_DTYPE_POINTER: u16 = 1;
896pub const IMAGE_SYM_DTYPE_FUNCTION: u16 = 2;
898pub const IMAGE_SYM_DTYPE_ARRAY: u16 = 3;
900
901pub const IMAGE_SYM_CLASS_END_OF_FUNCTION: u8 = 0xff;
903pub const IMAGE_SYM_CLASS_NULL: u8 = 0x00;
904pub const IMAGE_SYM_CLASS_AUTOMATIC: u8 = 0x01;
905pub const IMAGE_SYM_CLASS_EXTERNAL: u8 = 0x02;
906pub const IMAGE_SYM_CLASS_STATIC: u8 = 0x03;
907pub const IMAGE_SYM_CLASS_REGISTER: u8 = 0x04;
908pub const IMAGE_SYM_CLASS_EXTERNAL_DEF: u8 = 0x05;
909pub const IMAGE_SYM_CLASS_LABEL: u8 = 0x06;
910pub const IMAGE_SYM_CLASS_UNDEFINED_LABEL: u8 = 0x07;
911pub const IMAGE_SYM_CLASS_MEMBER_OF_STRUCT: u8 = 0x08;
912pub const IMAGE_SYM_CLASS_ARGUMENT: u8 = 0x09;
913pub const IMAGE_SYM_CLASS_STRUCT_TAG: u8 = 0x0A;
914pub const IMAGE_SYM_CLASS_MEMBER_OF_UNION: u8 = 0x0B;
915pub const IMAGE_SYM_CLASS_UNION_TAG: u8 = 0x0C;
916pub const IMAGE_SYM_CLASS_TYPE_DEFINITION: u8 = 0x0D;
917pub const IMAGE_SYM_CLASS_UNDEFINED_STATIC: u8 = 0x0E;
918pub const IMAGE_SYM_CLASS_ENUM_TAG: u8 = 0x0F;
919pub const IMAGE_SYM_CLASS_MEMBER_OF_ENUM: u8 = 0x10;
920pub const IMAGE_SYM_CLASS_REGISTER_PARAM: u8 = 0x11;
921pub const IMAGE_SYM_CLASS_BIT_FIELD: u8 = 0x12;
922
923pub const IMAGE_SYM_CLASS_FAR_EXTERNAL: u8 = 0x44;
924
925pub const IMAGE_SYM_CLASS_BLOCK: u8 = 0x64;
926pub const IMAGE_SYM_CLASS_FUNCTION: u8 = 0x65;
927pub const IMAGE_SYM_CLASS_END_OF_STRUCT: u8 = 0x66;
928pub const IMAGE_SYM_CLASS_FILE: u8 = 0x67;
929pub const IMAGE_SYM_CLASS_SECTION: u8 = 0x68;
931pub const IMAGE_SYM_CLASS_WEAK_EXTERNAL: u8 = 0x69;
932
933pub const IMAGE_SYM_CLASS_CLR_TOKEN: u8 = 0x6B;
934
935pub const N_BTMASK: u16 = 0x000F;
938pub const N_TMASK: u16 = 0x0030;
939pub const N_TMASK1: u16 = 0x00C0;
940pub const N_TMASK2: u16 = 0x00F0;
941pub const N_BTSHFT: usize = 4;
942pub const N_TSHIFT: usize = 2;
943
944pub const IMAGE_SYM_DTYPE_SHIFT: usize = N_BTSHFT;
945
946#[derive(Debug, Clone, Copy)]
953#[repr(C)]
954pub struct ImageAuxSymbolTokenDef {
955 pub aux_type: u8,
957 pub reserved1: u8,
959 pub symbol_table_index: U32Bytes<LE>,
960 pub reserved2: [u8; 12],
962}
963
964pub const IMAGE_AUX_SYMBOL_TYPE_TOKEN_DEF: u16 = 1;
965
966#[derive(Debug, Clone, Copy)]
969#[repr(C)]
970pub struct ImageAuxSymbolFunction {
971 pub tag_index: U32Bytes<LE>,
972 pub total_size: U32Bytes<LE>,
973 pub pointer_to_linenumber: U32Bytes<LE>,
974 pub pointer_to_next_function: U32Bytes<LE>,
975 pub unused: [u8; 2],
976}
977
978#[derive(Debug, Clone, Copy)]
981#[repr(C)]
982pub struct ImageAuxSymbolFunctionBeginEnd {
983 pub unused1: [u8; 4],
984 pub linenumber: U16Bytes<LE>,
986 pub unused2: [u8; 6],
987 pub pointer_to_next_function: U32Bytes<LE>,
988 pub unused3: [u8; 2],
989}
990
991#[derive(Debug, Clone, Copy)]
996#[repr(C)]
997pub struct ImageAuxSymbolWeak {
998 pub weak_default_sym_index: U32Bytes<LE>,
1000 pub weak_search_type: U32Bytes<LE>,
1001}
1002
1003#[derive(Debug, Clone, Copy)]
1008#[repr(C)]
1009pub struct ImageAuxSymbolSection {
1010 pub length: U32Bytes<LE>,
1012 pub number_of_relocations: U16Bytes<LE>,
1014 pub number_of_linenumbers: U16Bytes<LE>,
1016 pub check_sum: U32Bytes<LE>,
1018 pub number: U16Bytes<LE>,
1020 pub selection: u8,
1022 pub reserved: u8,
1023 pub high_number: U16Bytes<LE>,
1025}
1026
1027#[derive(Debug, Clone, Copy)]
1030#[repr(C)]
1031pub struct ImageAuxSymbolCrc {
1032 pub crc: U32Bytes<LE>,
1033}
1034
1035pub const IMAGE_COMDAT_SELECT_NODUPLICATES: u8 = 1;
1040pub const IMAGE_COMDAT_SELECT_ANY: u8 = 2;
1041pub const IMAGE_COMDAT_SELECT_SAME_SIZE: u8 = 3;
1042pub const IMAGE_COMDAT_SELECT_EXACT_MATCH: u8 = 4;
1043pub const IMAGE_COMDAT_SELECT_ASSOCIATIVE: u8 = 5;
1044pub const IMAGE_COMDAT_SELECT_LARGEST: u8 = 6;
1045pub const IMAGE_COMDAT_SELECT_NEWEST: u8 = 7;
1046
1047pub const IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY: u16 = 1;
1048pub const IMAGE_WEAK_EXTERN_SEARCH_LIBRARY: u16 = 2;
1049pub const IMAGE_WEAK_EXTERN_SEARCH_ALIAS: u16 = 3;
1050pub const IMAGE_WEAK_EXTERN_ANTI_DEPENDENCY: u16 = 4;
1051
1052#[derive(Debug, Clone, Copy)]
1058#[repr(C)]
1059pub struct ImageRelocation {
1060 pub virtual_address: U32Bytes<LE>,
1062 pub symbol_table_index: U32Bytes<LE>,
1063 pub typ: U16Bytes<LE>,
1064}
1065
1066pub const IMAGE_REL_I386_ABSOLUTE: u16 = 0x0000;
1071pub const IMAGE_REL_I386_DIR16: u16 = 0x0001;
1073pub const IMAGE_REL_I386_REL16: u16 = 0x0002;
1075pub const IMAGE_REL_I386_DIR32: u16 = 0x0006;
1077pub const IMAGE_REL_I386_DIR32NB: u16 = 0x0007;
1079pub const IMAGE_REL_I386_SEG12: u16 = 0x0009;
1081pub const IMAGE_REL_I386_SECTION: u16 = 0x000A;
1082pub const IMAGE_REL_I386_SECREL: u16 = 0x000B;
1083pub const IMAGE_REL_I386_TOKEN: u16 = 0x000C;
1085pub const IMAGE_REL_I386_SECREL7: u16 = 0x000D;
1087pub const IMAGE_REL_I386_REL32: u16 = 0x0014;
1089
1090pub const IMAGE_REL_MIPS_ABSOLUTE: u16 = 0x0000;
1095pub const IMAGE_REL_MIPS_REFHALF: u16 = 0x0001;
1096pub const IMAGE_REL_MIPS_REFWORD: u16 = 0x0002;
1097pub const IMAGE_REL_MIPS_JMPADDR: u16 = 0x0003;
1098pub const IMAGE_REL_MIPS_REFHI: u16 = 0x0004;
1099pub const IMAGE_REL_MIPS_REFLO: u16 = 0x0005;
1100pub const IMAGE_REL_MIPS_GPREL: u16 = 0x0006;
1101pub const IMAGE_REL_MIPS_LITERAL: u16 = 0x0007;
1102pub const IMAGE_REL_MIPS_SECTION: u16 = 0x000A;
1103pub const IMAGE_REL_MIPS_SECREL: u16 = 0x000B;
1104pub const IMAGE_REL_MIPS_SECRELLO: u16 = 0x000C;
1106pub const IMAGE_REL_MIPS_SECRELHI: u16 = 0x000D;
1108pub const IMAGE_REL_MIPS_TOKEN: u16 = 0x000E;
1110pub const IMAGE_REL_MIPS_JMPADDR16: u16 = 0x0010;
1111pub const IMAGE_REL_MIPS_REFWORDNB: u16 = 0x0022;
1112pub const IMAGE_REL_MIPS_PAIR: u16 = 0x0025;
1113
1114pub const IMAGE_REL_ALPHA_ABSOLUTE: u16 = 0x0000;
1118pub const IMAGE_REL_ALPHA_REFLONG: u16 = 0x0001;
1119pub const IMAGE_REL_ALPHA_REFQUAD: u16 = 0x0002;
1120pub const IMAGE_REL_ALPHA_GPREL32: u16 = 0x0003;
1121pub const IMAGE_REL_ALPHA_LITERAL: u16 = 0x0004;
1122pub const IMAGE_REL_ALPHA_LITUSE: u16 = 0x0005;
1123pub const IMAGE_REL_ALPHA_GPDISP: u16 = 0x0006;
1124pub const IMAGE_REL_ALPHA_BRADDR: u16 = 0x0007;
1125pub const IMAGE_REL_ALPHA_HINT: u16 = 0x0008;
1126pub const IMAGE_REL_ALPHA_INLINE_REFLONG: u16 = 0x0009;
1127pub const IMAGE_REL_ALPHA_REFHI: u16 = 0x000A;
1128pub const IMAGE_REL_ALPHA_REFLO: u16 = 0x000B;
1129pub const IMAGE_REL_ALPHA_PAIR: u16 = 0x000C;
1130pub const IMAGE_REL_ALPHA_MATCH: u16 = 0x000D;
1131pub const IMAGE_REL_ALPHA_SECTION: u16 = 0x000E;
1132pub const IMAGE_REL_ALPHA_SECREL: u16 = 0x000F;
1133pub const IMAGE_REL_ALPHA_REFLONGNB: u16 = 0x0010;
1134pub const IMAGE_REL_ALPHA_SECRELLO: u16 = 0x0011;
1136pub const IMAGE_REL_ALPHA_SECRELHI: u16 = 0x0012;
1138pub const IMAGE_REL_ALPHA_REFQ3: u16 = 0x0013;
1140pub const IMAGE_REL_ALPHA_REFQ2: u16 = 0x0014;
1142pub const IMAGE_REL_ALPHA_REFQ1: u16 = 0x0015;
1144pub const IMAGE_REL_ALPHA_GPRELLO: u16 = 0x0016;
1146pub const IMAGE_REL_ALPHA_GPRELHI: u16 = 0x0017;
1148
1149pub const IMAGE_REL_PPC_ABSOLUTE: u16 = 0x0000;
1154pub const IMAGE_REL_PPC_ADDR64: u16 = 0x0001;
1156pub const IMAGE_REL_PPC_ADDR32: u16 = 0x0002;
1158pub const IMAGE_REL_PPC_ADDR24: u16 = 0x0003;
1160pub const IMAGE_REL_PPC_ADDR16: u16 = 0x0004;
1162pub const IMAGE_REL_PPC_ADDR14: u16 = 0x0005;
1164pub const IMAGE_REL_PPC_REL24: u16 = 0x0006;
1166pub const IMAGE_REL_PPC_REL14: u16 = 0x0007;
1168pub const IMAGE_REL_PPC_TOCREL16: u16 = 0x0008;
1170pub const IMAGE_REL_PPC_TOCREL14: u16 = 0x0009;
1172
1173pub const IMAGE_REL_PPC_ADDR32NB: u16 = 0x000A;
1175pub const IMAGE_REL_PPC_SECREL: u16 = 0x000B;
1177pub const IMAGE_REL_PPC_SECTION: u16 = 0x000C;
1179pub const IMAGE_REL_PPC_IFGLUE: u16 = 0x000D;
1181pub const IMAGE_REL_PPC_IMGLUE: u16 = 0x000E;
1183pub const IMAGE_REL_PPC_SECREL16: u16 = 0x000F;
1185pub const IMAGE_REL_PPC_REFHI: u16 = 0x0010;
1186pub const IMAGE_REL_PPC_REFLO: u16 = 0x0011;
1187pub const IMAGE_REL_PPC_PAIR: u16 = 0x0012;
1188pub const IMAGE_REL_PPC_SECRELLO: u16 = 0x0013;
1190pub const IMAGE_REL_PPC_SECRELHI: u16 = 0x0014;
1192pub const IMAGE_REL_PPC_GPREL: u16 = 0x0015;
1193pub const IMAGE_REL_PPC_TOKEN: u16 = 0x0016;
1195
1196pub const IMAGE_REL_PPC_TYPEMASK: u16 = 0x00FF;
1198
1199pub const IMAGE_REL_PPC_NEG: u16 = 0x0100;
1203pub const IMAGE_REL_PPC_BRTAKEN: u16 = 0x0200;
1205pub const IMAGE_REL_PPC_BRNTAKEN: u16 = 0x0400;
1207pub const IMAGE_REL_PPC_TOCDEFN: u16 = 0x0800;
1209
1210pub const IMAGE_REL_SH3_ABSOLUTE: u16 = 0x0000;
1215pub const IMAGE_REL_SH3_DIRECT16: u16 = 0x0001;
1217pub const IMAGE_REL_SH3_DIRECT32: u16 = 0x0002;
1219pub const IMAGE_REL_SH3_DIRECT8: u16 = 0x0003;
1221pub const IMAGE_REL_SH3_DIRECT8_WORD: u16 = 0x0004;
1223pub const IMAGE_REL_SH3_DIRECT8_LONG: u16 = 0x0005;
1225pub const IMAGE_REL_SH3_DIRECT4: u16 = 0x0006;
1227pub const IMAGE_REL_SH3_DIRECT4_WORD: u16 = 0x0007;
1229pub const IMAGE_REL_SH3_DIRECT4_LONG: u16 = 0x0008;
1231pub const IMAGE_REL_SH3_PCREL8_WORD: u16 = 0x0009;
1233pub const IMAGE_REL_SH3_PCREL8_LONG: u16 = 0x000A;
1235pub const IMAGE_REL_SH3_PCREL12_WORD: u16 = 0x000B;
1237pub const IMAGE_REL_SH3_STARTOF_SECTION: u16 = 0x000C;
1239pub const IMAGE_REL_SH3_SIZEOF_SECTION: u16 = 0x000D;
1241pub const IMAGE_REL_SH3_SECTION: u16 = 0x000E;
1243pub const IMAGE_REL_SH3_SECREL: u16 = 0x000F;
1245pub const IMAGE_REL_SH3_DIRECT32_NB: u16 = 0x0010;
1247pub const IMAGE_REL_SH3_GPREL4_LONG: u16 = 0x0011;
1249pub const IMAGE_REL_SH3_TOKEN: u16 = 0x0012;
1251pub const IMAGE_REL_SHM_PCRELPT: u16 = 0x0013;
1254pub const IMAGE_REL_SHM_REFLO: u16 = 0x0014;
1256pub const IMAGE_REL_SHM_REFHALF: u16 = 0x0015;
1258pub const IMAGE_REL_SHM_RELLO: u16 = 0x0016;
1260pub const IMAGE_REL_SHM_RELHALF: u16 = 0x0017;
1262pub const IMAGE_REL_SHM_PAIR: u16 = 0x0018;
1264
1265pub const IMAGE_REL_SH_NOMODE: u16 = 0x8000;
1267
1268pub const IMAGE_REL_ARM_ABSOLUTE: u16 = 0x0000;
1270pub const IMAGE_REL_ARM_ADDR32: u16 = 0x0001;
1272pub const IMAGE_REL_ARM_ADDR32NB: u16 = 0x0002;
1274pub const IMAGE_REL_ARM_BRANCH24: u16 = 0x0003;
1276pub const IMAGE_REL_ARM_BRANCH11: u16 = 0x0004;
1278pub const IMAGE_REL_ARM_TOKEN: u16 = 0x0005;
1280pub const IMAGE_REL_ARM_GPREL12: u16 = 0x0006;
1282pub const IMAGE_REL_ARM_GPREL7: u16 = 0x0007;
1284pub const IMAGE_REL_ARM_BLX24: u16 = 0x0008;
1285pub const IMAGE_REL_ARM_BLX11: u16 = 0x0009;
1286pub const IMAGE_REL_ARM_REL32: u16 = 0x000A;
1288pub const IMAGE_REL_ARM_SECTION: u16 = 0x000E;
1290pub const IMAGE_REL_ARM_SECREL: u16 = 0x000F;
1292pub const IMAGE_REL_ARM_MOV32A: u16 = 0x0010;
1294pub const IMAGE_REL_ARM_MOV32: u16 = 0x0010;
1296pub const IMAGE_REL_ARM_MOV32T: u16 = 0x0011;
1298pub const IMAGE_REL_THUMB_MOV32: u16 = 0x0011;
1300pub const IMAGE_REL_ARM_BRANCH20T: u16 = 0x0012;
1302pub const IMAGE_REL_THUMB_BRANCH20: u16 = 0x0012;
1304pub const IMAGE_REL_ARM_BRANCH24T: u16 = 0x0014;
1306pub const IMAGE_REL_THUMB_BRANCH24: u16 = 0x0014;
1308pub const IMAGE_REL_ARM_BLX23T: u16 = 0x0015;
1310pub const IMAGE_REL_THUMB_BLX23: u16 = 0x0015;
1312
1313pub const IMAGE_REL_AM_ABSOLUTE: u16 = 0x0000;
1314pub const IMAGE_REL_AM_ADDR32: u16 = 0x0001;
1315pub const IMAGE_REL_AM_ADDR32NB: u16 = 0x0002;
1316pub const IMAGE_REL_AM_CALL32: u16 = 0x0003;
1317pub const IMAGE_REL_AM_FUNCINFO: u16 = 0x0004;
1318pub const IMAGE_REL_AM_REL32_1: u16 = 0x0005;
1319pub const IMAGE_REL_AM_REL32_2: u16 = 0x0006;
1320pub const IMAGE_REL_AM_SECREL: u16 = 0x0007;
1321pub const IMAGE_REL_AM_SECTION: u16 = 0x0008;
1322pub const IMAGE_REL_AM_TOKEN: u16 = 0x0009;
1323
1324pub const IMAGE_REL_ARM64_ABSOLUTE: u16 = 0x0000;
1330pub const IMAGE_REL_ARM64_ADDR32: u16 = 0x0001;
1332pub const IMAGE_REL_ARM64_ADDR32NB: u16 = 0x0002;
1334pub const IMAGE_REL_ARM64_BRANCH26: u16 = 0x0003;
1336pub const IMAGE_REL_ARM64_PAGEBASE_REL21: u16 = 0x0004;
1338pub const IMAGE_REL_ARM64_REL21: u16 = 0x0005;
1340pub const IMAGE_REL_ARM64_PAGEOFFSET_12A: u16 = 0x0006;
1342pub const IMAGE_REL_ARM64_PAGEOFFSET_12L: u16 = 0x0007;
1344pub const IMAGE_REL_ARM64_SECREL: u16 = 0x0008;
1346pub const IMAGE_REL_ARM64_SECREL_LOW12A: u16 = 0x0009;
1348pub const IMAGE_REL_ARM64_SECREL_HIGH12A: u16 = 0x000A;
1350pub const IMAGE_REL_ARM64_SECREL_LOW12L: u16 = 0x000B;
1352pub const IMAGE_REL_ARM64_TOKEN: u16 = 0x000C;
1353pub const IMAGE_REL_ARM64_SECTION: u16 = 0x000D;
1355pub const IMAGE_REL_ARM64_ADDR64: u16 = 0x000E;
1357pub const IMAGE_REL_ARM64_BRANCH19: u16 = 0x000F;
1359pub const IMAGE_REL_ARM64_BRANCH14: u16 = 0x0010;
1361pub const IMAGE_REL_ARM64_REL32: u16 = 0x0011;
1363
1364pub const IMAGE_REL_AMD64_ABSOLUTE: u16 = 0x0000;
1369pub const IMAGE_REL_AMD64_ADDR64: u16 = 0x0001;
1371pub const IMAGE_REL_AMD64_ADDR32: u16 = 0x0002;
1373pub const IMAGE_REL_AMD64_ADDR32NB: u16 = 0x0003;
1375pub const IMAGE_REL_AMD64_REL32: u16 = 0x0004;
1377pub const IMAGE_REL_AMD64_REL32_1: u16 = 0x0005;
1379pub const IMAGE_REL_AMD64_REL32_2: u16 = 0x0006;
1381pub const IMAGE_REL_AMD64_REL32_3: u16 = 0x0007;
1383pub const IMAGE_REL_AMD64_REL32_4: u16 = 0x0008;
1385pub const IMAGE_REL_AMD64_REL32_5: u16 = 0x0009;
1387pub const IMAGE_REL_AMD64_SECTION: u16 = 0x000A;
1389pub const IMAGE_REL_AMD64_SECREL: u16 = 0x000B;
1391pub const IMAGE_REL_AMD64_SECREL7: u16 = 0x000C;
1393pub const IMAGE_REL_AMD64_TOKEN: u16 = 0x000D;
1395pub const IMAGE_REL_AMD64_SREL32: u16 = 0x000E;
1397pub const IMAGE_REL_AMD64_PAIR: u16 = 0x000F;
1398pub const IMAGE_REL_AMD64_SSPAN32: u16 = 0x0010;
1400pub const IMAGE_REL_AMD64_EHANDLER: u16 = 0x0011;
1401pub const IMAGE_REL_AMD64_IMPORT_BR: u16 = 0x0012;
1403pub const IMAGE_REL_AMD64_IMPORT_CALL: u16 = 0x0013;
1405pub const IMAGE_REL_AMD64_CFG_BR: u16 = 0x0014;
1407pub const IMAGE_REL_AMD64_CFG_BR_REX: u16 = 0x0015;
1409pub const IMAGE_REL_AMD64_CFG_CALL: u16 = 0x0016;
1411pub const IMAGE_REL_AMD64_INDIR_BR: u16 = 0x0017;
1413pub const IMAGE_REL_AMD64_INDIR_BR_REX: u16 = 0x0018;
1415pub const IMAGE_REL_AMD64_INDIR_CALL: u16 = 0x0019;
1417pub const IMAGE_REL_AMD64_INDIR_BR_SWITCHTABLE_FIRST: u16 = 0x0020;
1419pub const IMAGE_REL_AMD64_INDIR_BR_SWITCHTABLE_LAST: u16 = 0x002F;
1421
1422pub const IMAGE_REL_IA64_ABSOLUTE: u16 = 0x0000;
1426pub const IMAGE_REL_IA64_IMM14: u16 = 0x0001;
1427pub const IMAGE_REL_IA64_IMM22: u16 = 0x0002;
1428pub const IMAGE_REL_IA64_IMM64: u16 = 0x0003;
1429pub const IMAGE_REL_IA64_DIR32: u16 = 0x0004;
1430pub const IMAGE_REL_IA64_DIR64: u16 = 0x0005;
1431pub const IMAGE_REL_IA64_PCREL21B: u16 = 0x0006;
1432pub const IMAGE_REL_IA64_PCREL21M: u16 = 0x0007;
1433pub const IMAGE_REL_IA64_PCREL21F: u16 = 0x0008;
1434pub const IMAGE_REL_IA64_GPREL22: u16 = 0x0009;
1435pub const IMAGE_REL_IA64_LTOFF22: u16 = 0x000A;
1436pub const IMAGE_REL_IA64_SECTION: u16 = 0x000B;
1437pub const IMAGE_REL_IA64_SECREL22: u16 = 0x000C;
1438pub const IMAGE_REL_IA64_SECREL64I: u16 = 0x000D;
1439pub const IMAGE_REL_IA64_SECREL32: u16 = 0x000E;
1440pub const IMAGE_REL_IA64_DIR32NB: u16 = 0x0010;
1442pub const IMAGE_REL_IA64_SREL14: u16 = 0x0011;
1443pub const IMAGE_REL_IA64_SREL22: u16 = 0x0012;
1444pub const IMAGE_REL_IA64_SREL32: u16 = 0x0013;
1445pub const IMAGE_REL_IA64_UREL32: u16 = 0x0014;
1446pub const IMAGE_REL_IA64_PCREL60X: u16 = 0x0015;
1448pub const IMAGE_REL_IA64_PCREL60B: u16 = 0x0016;
1450pub const IMAGE_REL_IA64_PCREL60F: u16 = 0x0017;
1452pub const IMAGE_REL_IA64_PCREL60I: u16 = 0x0018;
1454pub const IMAGE_REL_IA64_PCREL60M: u16 = 0x0019;
1456pub const IMAGE_REL_IA64_IMMGPREL64: u16 = 0x001A;
1457pub const IMAGE_REL_IA64_TOKEN: u16 = 0x001B;
1459pub const IMAGE_REL_IA64_GPREL32: u16 = 0x001C;
1460pub const IMAGE_REL_IA64_ADDEND: u16 = 0x001F;
1461
1462pub const IMAGE_REL_CEF_ABSOLUTE: u16 = 0x0000;
1467pub const IMAGE_REL_CEF_ADDR32: u16 = 0x0001;
1469pub const IMAGE_REL_CEF_ADDR64: u16 = 0x0002;
1471pub const IMAGE_REL_CEF_ADDR32NB: u16 = 0x0003;
1473pub const IMAGE_REL_CEF_SECTION: u16 = 0x0004;
1475pub const IMAGE_REL_CEF_SECREL: u16 = 0x0005;
1477pub const IMAGE_REL_CEF_TOKEN: u16 = 0x0006;
1479
1480pub const IMAGE_REL_CEE_ABSOLUTE: u16 = 0x0000;
1485pub const IMAGE_REL_CEE_ADDR32: u16 = 0x0001;
1487pub const IMAGE_REL_CEE_ADDR64: u16 = 0x0002;
1489pub const IMAGE_REL_CEE_ADDR32NB: u16 = 0x0003;
1491pub const IMAGE_REL_CEE_SECTION: u16 = 0x0004;
1493pub const IMAGE_REL_CEE_SECREL: u16 = 0x0005;
1495pub const IMAGE_REL_CEE_TOKEN: u16 = 0x0006;
1497
1498pub const IMAGE_REL_M32R_ABSOLUTE: u16 = 0x0000;
1500pub const IMAGE_REL_M32R_ADDR32: u16 = 0x0001;
1502pub const IMAGE_REL_M32R_ADDR32NB: u16 = 0x0002;
1504pub const IMAGE_REL_M32R_ADDR24: u16 = 0x0003;
1506pub const IMAGE_REL_M32R_GPREL16: u16 = 0x0004;
1508pub const IMAGE_REL_M32R_PCREL24: u16 = 0x0005;
1510pub const IMAGE_REL_M32R_PCREL16: u16 = 0x0006;
1512pub const IMAGE_REL_M32R_PCREL8: u16 = 0x0007;
1514pub const IMAGE_REL_M32R_REFHALF: u16 = 0x0008;
1516pub const IMAGE_REL_M32R_REFHI: u16 = 0x0009;
1518pub const IMAGE_REL_M32R_REFLO: u16 = 0x000A;
1520pub const IMAGE_REL_M32R_PAIR: u16 = 0x000B;
1522pub const IMAGE_REL_M32R_SECTION: u16 = 0x000C;
1524pub const IMAGE_REL_M32R_SECREL32: u16 = 0x000D;
1526pub const IMAGE_REL_M32R_TOKEN: u16 = 0x000E;
1528
1529pub const IMAGE_REL_EBC_ABSOLUTE: u16 = 0x0000;
1531pub const IMAGE_REL_EBC_ADDR32NB: u16 = 0x0001;
1533pub const IMAGE_REL_EBC_REL32: u16 = 0x0002;
1535pub const IMAGE_REL_EBC_SECTION: u16 = 0x0003;
1537pub const IMAGE_REL_EBC_SECREL: u16 = 0x0004;
1539
1540pub const EMARCH_ENC_I17_IMM7B_INST_WORD_X: u16 = 3;
1552pub const EMARCH_ENC_I17_IMM7B_SIZE_X: u16 = 7;
1554pub const EMARCH_ENC_I17_IMM7B_INST_WORD_POS_X: u16 = 4;
1556pub const EMARCH_ENC_I17_IMM7B_VAL_POS_X: u16 = 0;
1558
1559pub const EMARCH_ENC_I17_IMM9D_INST_WORD_X: u16 = 3;
1561pub const EMARCH_ENC_I17_IMM9D_SIZE_X: u16 = 9;
1563pub const EMARCH_ENC_I17_IMM9D_INST_WORD_POS_X: u16 = 18;
1565pub const EMARCH_ENC_I17_IMM9D_VAL_POS_X: u16 = 7;
1567
1568pub const EMARCH_ENC_I17_IMM5C_INST_WORD_X: u16 = 3;
1570pub const EMARCH_ENC_I17_IMM5C_SIZE_X: u16 = 5;
1572pub const EMARCH_ENC_I17_IMM5C_INST_WORD_POS_X: u16 = 13;
1574pub const EMARCH_ENC_I17_IMM5C_VAL_POS_X: u16 = 16;
1576
1577pub const EMARCH_ENC_I17_IC_INST_WORD_X: u16 = 3;
1579pub const EMARCH_ENC_I17_IC_SIZE_X: u16 = 1;
1581pub const EMARCH_ENC_I17_IC_INST_WORD_POS_X: u16 = 12;
1583pub const EMARCH_ENC_I17_IC_VAL_POS_X: u16 = 21;
1585
1586pub const EMARCH_ENC_I17_IMM41A_INST_WORD_X: u16 = 1;
1588pub const EMARCH_ENC_I17_IMM41A_SIZE_X: u16 = 10;
1590pub const EMARCH_ENC_I17_IMM41A_INST_WORD_POS_X: u16 = 14;
1592pub const EMARCH_ENC_I17_IMM41A_VAL_POS_X: u16 = 22;
1594
1595pub const EMARCH_ENC_I17_IMM41B_INST_WORD_X: u16 = 1;
1597pub const EMARCH_ENC_I17_IMM41B_SIZE_X: u16 = 8;
1599pub const EMARCH_ENC_I17_IMM41B_INST_WORD_POS_X: u16 = 24;
1601pub const EMARCH_ENC_I17_IMM41B_VAL_POS_X: u16 = 32;
1603
1604pub const EMARCH_ENC_I17_IMM41C_INST_WORD_X: u16 = 2;
1606pub const EMARCH_ENC_I17_IMM41C_SIZE_X: u16 = 23;
1608pub const EMARCH_ENC_I17_IMM41C_INST_WORD_POS_X: u16 = 0;
1610pub const EMARCH_ENC_I17_IMM41C_VAL_POS_X: u16 = 40;
1612
1613pub const EMARCH_ENC_I17_SIGN_INST_WORD_X: u16 = 3;
1615pub const EMARCH_ENC_I17_SIGN_SIZE_X: u16 = 1;
1617pub const EMARCH_ENC_I17_SIGN_INST_WORD_POS_X: u16 = 27;
1619pub const EMARCH_ENC_I17_SIGN_VAL_POS_X: u16 = 63;
1621
1622pub const X3_OPCODE_INST_WORD_X: u16 = 3;
1624pub const X3_OPCODE_SIZE_X: u16 = 4;
1626pub const X3_OPCODE_INST_WORD_POS_X: u16 = 28;
1628pub const X3_OPCODE_SIGN_VAL_POS_X: u16 = 0;
1630
1631pub const X3_I_INST_WORD_X: u16 = 3;
1633pub const X3_I_SIZE_X: u16 = 1;
1635pub const X3_I_INST_WORD_POS_X: u16 = 27;
1637pub const X3_I_SIGN_VAL_POS_X: u16 = 59;
1639
1640pub const X3_D_WH_INST_WORD_X: u16 = 3;
1642pub const X3_D_WH_SIZE_X: u16 = 3;
1644pub const X3_D_WH_INST_WORD_POS_X: u16 = 24;
1646pub const X3_D_WH_SIGN_VAL_POS_X: u16 = 0;
1648
1649pub const X3_IMM20_INST_WORD_X: u16 = 3;
1651pub const X3_IMM20_SIZE_X: u16 = 20;
1653pub const X3_IMM20_INST_WORD_POS_X: u16 = 4;
1655pub const X3_IMM20_SIGN_VAL_POS_X: u16 = 0;
1657
1658pub const X3_IMM39_1_INST_WORD_X: u16 = 2;
1660pub const X3_IMM39_1_SIZE_X: u16 = 23;
1662pub const X3_IMM39_1_INST_WORD_POS_X: u16 = 0;
1664pub const X3_IMM39_1_SIGN_VAL_POS_X: u16 = 36;
1666
1667pub const X3_IMM39_2_INST_WORD_X: u16 = 1;
1669pub const X3_IMM39_2_SIZE_X: u16 = 16;
1671pub const X3_IMM39_2_INST_WORD_POS_X: u16 = 16;
1673pub const X3_IMM39_2_SIGN_VAL_POS_X: u16 = 20;
1675
1676pub const X3_P_INST_WORD_X: u16 = 3;
1678pub const X3_P_SIZE_X: u16 = 4;
1680pub const X3_P_INST_WORD_POS_X: u16 = 0;
1682pub const X3_P_SIGN_VAL_POS_X: u16 = 0;
1684
1685pub const X3_TMPLT_INST_WORD_X: u16 = 0;
1687pub const X3_TMPLT_SIZE_X: u16 = 4;
1689pub const X3_TMPLT_INST_WORD_POS_X: u16 = 0;
1691pub const X3_TMPLT_SIGN_VAL_POS_X: u16 = 0;
1693
1694pub const X3_BTYPE_QP_INST_WORD_X: u16 = 2;
1696pub const X3_BTYPE_QP_SIZE_X: u16 = 9;
1698pub const X3_BTYPE_QP_INST_WORD_POS_X: u16 = 23;
1700pub const X3_BTYPE_QP_INST_VAL_POS_X: u16 = 0;
1702
1703pub const X3_EMPTY_INST_WORD_X: u16 = 1;
1705pub const X3_EMPTY_SIZE_X: u16 = 2;
1707pub const X3_EMPTY_INST_WORD_POS_X: u16 = 14;
1709pub const X3_EMPTY_INST_VAL_POS_X: u16 = 0;
1711
1712#[derive(Debug, Clone, Copy)]
1718#[repr(C)]
1719pub struct ImageLinenumber {
1720 pub symbol_table_index_or_virtual_address: U32Bytes<LE>,
1723 pub linenumber: U16Bytes<LE>,
1725}
1726
1727#[derive(Debug, Clone, Copy)]
1732#[repr(C)]
1733pub struct ImageBaseRelocation {
1734 pub virtual_address: U32<LE>,
1735 pub size_of_block: U32<LE>,
1736 }
1738
1739pub const IMAGE_REL_BASED_ABSOLUTE: u16 = 0;
1744pub const IMAGE_REL_BASED_HIGH: u16 = 1;
1745pub const IMAGE_REL_BASED_LOW: u16 = 2;
1746pub const IMAGE_REL_BASED_HIGHLOW: u16 = 3;
1747pub const IMAGE_REL_BASED_HIGHADJ: u16 = 4;
1748pub const IMAGE_REL_BASED_MACHINE_SPECIFIC_5: u16 = 5;
1749pub const IMAGE_REL_BASED_RESERVED: u16 = 6;
1750pub const IMAGE_REL_BASED_MACHINE_SPECIFIC_7: u16 = 7;
1751pub const IMAGE_REL_BASED_MACHINE_SPECIFIC_8: u16 = 8;
1752pub const IMAGE_REL_BASED_MACHINE_SPECIFIC_9: u16 = 9;
1753pub const IMAGE_REL_BASED_DIR64: u16 = 10;
1754
1755pub const IMAGE_REL_BASED_IA64_IMM64: u16 = 9;
1760
1761pub const IMAGE_REL_BASED_MIPS_JMPADDR: u16 = 5;
1762pub const IMAGE_REL_BASED_MIPS_JMPADDR16: u16 = 9;
1763
1764pub const IMAGE_REL_BASED_ARM_MOV32: u16 = 5;
1765pub const IMAGE_REL_BASED_THUMB_MOV32: u16 = 7;
1766
1767pub const IMAGE_REL_BASED_RISCV_HIGH20: u16 = 5;
1768pub const IMAGE_REL_BASED_RISCV_LOW12I: u16 = 7;
1769pub const IMAGE_REL_BASED_RISCV_LOW12S: u16 = 8;
1770
1771pub const IMAGE_ARCHIVE_START_SIZE: usize = 8;
1776pub const IMAGE_ARCHIVE_START: &[u8; 8] = b"!<arch>\n";
1777pub const IMAGE_ARCHIVE_END: &[u8] = b"`\n";
1778pub const IMAGE_ARCHIVE_PAD: &[u8] = b"\n";
1779pub const IMAGE_ARCHIVE_LINKER_MEMBER: &[u8; 16] = b"/ ";
1780pub const IMAGE_ARCHIVE_LONGNAMES_MEMBER: &[u8; 16] = b"// ";
1781pub const IMAGE_ARCHIVE_HYBRIDMAP_MEMBER: &[u8; 16] = b"/<HYBRIDMAP>/ ";
1782
1783#[derive(Debug, Clone, Copy)]
1784#[repr(C)]
1785pub struct ImageArchiveMemberHeader {
1786 pub name: [u8; 16],
1788 pub date: [u8; 12],
1790 pub user_id: [u8; 6],
1792 pub group_id: [u8; 6],
1794 pub mode: [u8; 8],
1796 pub size: [u8; 10],
1798 pub end_header: [u8; 2],
1800}
1801
1802pub const IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR: u16 = 60;
1803
1804#[derive(Debug, Clone, Copy)]
1813#[repr(C)]
1814pub struct ImageExportDirectory {
1815 pub characteristics: U32<LE>,
1816 pub time_date_stamp: U32<LE>,
1817 pub major_version: U16<LE>,
1818 pub minor_version: U16<LE>,
1819 pub name: U32<LE>,
1820 pub base: U32<LE>,
1821 pub number_of_functions: U32<LE>,
1822 pub number_of_names: U32<LE>,
1823 pub address_of_functions: U32<LE>,
1825 pub address_of_names: U32<LE>,
1827 pub address_of_name_ordinals: U32<LE>,
1829}
1830
1831#[derive(Debug, Clone, Copy)]
1836#[repr(C)]
1837pub struct ImageImportByName {
1838 pub hint: U16<LE>,
1839 }
1841
1842#[derive(Debug, Clone, Copy)]
1843#[repr(C)]
1844pub struct ImageThunkData64(pub U64<LE>);
1845#[derive(Debug, Clone, Copy)]
1858#[repr(C)]
1859pub struct ImageThunkData32(pub U32<LE>);
1860pub const IMAGE_ORDINAL_FLAG64: u64 = 0x8000000000000000;
1874pub const IMAGE_ORDINAL_FLAG32: u32 = 0x80000000;
1875
1876#[derive(Debug, Clone, Copy)]
1889#[repr(C)]
1890pub struct ImageTlsDirectory64 {
1891 pub start_address_of_raw_data: U64<LE>,
1892 pub end_address_of_raw_data: U64<LE>,
1893 pub address_of_index: U64<LE>,
1895 pub address_of_call_backs: U64<LE>,
1897 pub size_of_zero_fill: U32<LE>,
1898 pub characteristics: U32<LE>,
1899}
1900
1901#[derive(Debug, Clone, Copy)]
1902#[repr(C)]
1903pub struct ImageTlsDirectory32 {
1904 pub start_address_of_raw_data: U32<LE>,
1905 pub end_address_of_raw_data: U32<LE>,
1906 pub address_of_index: U32<LE>,
1908 pub address_of_call_backs: U32<LE>,
1910 pub size_of_zero_fill: U32<LE>,
1911 pub characteristics: U32<LE>,
1912}
1913
1914#[derive(Debug, Clone, Copy)]
1915#[repr(C)]
1916pub struct ImageImportDescriptor {
1917 pub original_first_thunk: U32Bytes<LE>,
1920 pub time_date_stamp: U32Bytes<LE>,
1925 pub forwarder_chain: U32Bytes<LE>,
1927 pub name: U32Bytes<LE>,
1928 pub first_thunk: U32Bytes<LE>,
1930}
1931
1932impl ImageImportDescriptor {
1933 pub fn is_null(&self) -> bool {
1936 self.original_first_thunk.get(LE) == 0
1937 && self.time_date_stamp.get(LE) == 0
1938 && self.forwarder_chain.get(LE) == 0
1939 && self.name.get(LE) == 0
1940 && self.first_thunk.get(LE) == 0
1941 }
1942}
1943
1944#[derive(Debug, Clone, Copy)]
1949#[repr(C)]
1950pub struct ImageBoundImportDescriptor {
1951 pub time_date_stamp: U32<LE>,
1952 pub offset_module_name: U16<LE>,
1953 pub number_of_module_forwarder_refs: U16<LE>,
1954 }
1956
1957#[derive(Debug, Clone, Copy)]
1958#[repr(C)]
1959pub struct ImageBoundForwarderRef {
1960 pub time_date_stamp: U32<LE>,
1961 pub offset_module_name: U16<LE>,
1962 pub reserved: U16<LE>,
1963}
1964
1965#[derive(Debug, Clone, Copy)]
1966#[repr(C)]
1967pub struct ImageDelayloadDescriptor {
1968 pub attributes: U32<LE>,
1969
1970 pub dll_name_rva: U32<LE>,
1972 pub module_handle_rva: U32<LE>,
1974 pub import_address_table_rva: U32<LE>,
1976 pub import_name_table_rva: U32<LE>,
1978 pub bound_import_address_table_rva: U32<LE>,
1980 pub unload_information_table_rva: U32<LE>,
1982 pub time_date_stamp: U32<LE>,
1984}
1985
1986impl ImageDelayloadDescriptor {
1987 pub fn is_null(&self) -> bool {
1990 self.attributes.get(LE) == 0
1991 && self.dll_name_rva.get(LE) == 0
1992 && self.module_handle_rva.get(LE) == 0
1993 && self.import_address_table_rva.get(LE) == 0
1994 && self.import_name_table_rva.get(LE) == 0
1995 && self.bound_import_address_table_rva.get(LE) == 0
1996 && self.unload_information_table_rva.get(LE) == 0
1997 && self.time_date_stamp.get(LE) == 0
1998 }
1999}
2000
2001pub const IMAGE_DELAYLOAD_RVA_BASED: u32 = 0x8000_0000;
2003
2004#[derive(Debug, Clone, Copy)]
2023#[repr(C)]
2024pub struct ImageResourceDirectory {
2025 pub characteristics: U32<LE>,
2026 pub time_date_stamp: U32<LE>,
2027 pub major_version: U16<LE>,
2028 pub minor_version: U16<LE>,
2029 pub number_of_named_entries: U16<LE>,
2030 pub number_of_id_entries: U16<LE>,
2031}
2032
2033pub const IMAGE_RESOURCE_NAME_IS_STRING: u32 = 0x8000_0000;
2034pub const IMAGE_RESOURCE_DATA_IS_DIRECTORY: u32 = 0x8000_0000;
2035#[derive(Debug, Clone, Copy)]
2051#[repr(C)]
2052pub struct ImageResourceDirectoryEntry {
2053 pub name_or_id: U32<LE>,
2054 pub offset_to_data_or_directory: U32<LE>,
2055}
2056
2057#[derive(Debug, Clone, Copy)]
2067#[repr(C)]
2068pub struct ImageResourceDirectoryString {
2069 pub length: U16<LE>,
2070 }
2072
2073#[derive(Debug, Clone, Copy)]
2074#[repr(C)]
2075pub struct ImageResourceDirStringU {
2076 pub length: U16<LE>,
2077 }
2079
2080#[derive(Debug, Clone, Copy)]
2090#[repr(C)]
2091pub struct ImageResourceDataEntry {
2092 pub offset_to_data: U32<LE>,
2094 pub size: U32<LE>,
2095 pub code_page: U32<LE>,
2096 pub reserved: U32<LE>,
2097}
2098
2099pub const RT_CURSOR: u16 = 1;
2103pub const RT_BITMAP: u16 = 2;
2105pub const RT_ICON: u16 = 3;
2107pub const RT_MENU: u16 = 4;
2109pub const RT_DIALOG: u16 = 5;
2111pub const RT_STRING: u16 = 6;
2113pub const RT_FONTDIR: u16 = 7;
2115pub const RT_FONT: u16 = 8;
2117pub const RT_ACCELERATOR: u16 = 9;
2119pub const RT_RCDATA: u16 = 10;
2121pub const RT_MESSAGETABLE: u16 = 11;
2123pub const RT_GROUP_CURSOR: u16 = 12;
2125pub const RT_GROUP_ICON: u16 = 14;
2127pub const RT_VERSION: u16 = 16;
2129pub const RT_DLGINCLUDE: u16 = 17;
2131pub const RT_PLUGPLAY: u16 = 19;
2133pub const RT_VXD: u16 = 20;
2135pub const RT_ANICURSOR: u16 = 21;
2137pub const RT_ANIICON: u16 = 22;
2139pub const RT_HTML: u16 = 23;
2141pub const RT_MANIFEST: u16 = 24;
2143
2144#[derive(Debug, Clone, Copy)]
2149#[repr(C)]
2150pub struct ImageLoadConfigCodeIntegrity {
2151 pub flags: U16<LE>,
2153 pub catalog: U16<LE>,
2155 pub catalog_offset: U32<LE>,
2156 pub reserved: U32<LE>,
2158}
2159
2160#[derive(Debug, Clone, Copy)]
2165#[repr(C)]
2166pub struct ImageDynamicRelocationTable {
2167 pub version: U32<LE>,
2168 pub size: U32<LE>,
2169 }
2171
2172#[derive(Debug, Clone, Copy)]
2177#[repr(C)]
2178pub struct ImageDynamicRelocation32 {
2179 pub symbol: U32<LE>,
2180 pub base_reloc_size: U32<LE>,
2181 }
2183
2184#[derive(Debug, Clone, Copy)]
2185#[repr(C)]
2186pub struct ImageDynamicRelocation64 {
2187 pub symbol: U64<LE>,
2188 pub base_reloc_size: U32<LE>,
2189 }
2191
2192#[derive(Debug, Clone, Copy)]
2193#[repr(C)]
2194pub struct ImageDynamicRelocation32V2 {
2195 pub header_size: U32<LE>,
2196 pub fixup_info_size: U32<LE>,
2197 pub symbol: U32<LE>,
2198 pub symbol_group: U32<LE>,
2199 pub flags: U32<LE>,
2200 }
2203
2204#[derive(Debug, Clone, Copy)]
2205#[repr(C)]
2206pub struct ImageDynamicRelocation64V2 {
2207 pub header_size: U32<LE>,
2208 pub fixup_info_size: U32<LE>,
2209 pub symbol: U64<LE>,
2210 pub symbol_group: U32<LE>,
2211 pub flags: U32<LE>,
2212 }
2215
2216pub const IMAGE_DYNAMIC_RELOCATION_GUARD_RF_PROLOGUE: u32 = 0x0000_0001;
2221pub const IMAGE_DYNAMIC_RELOCATION_GUARD_RF_EPILOGUE: u32 = 0x0000_0002;
2222pub const IMAGE_DYNAMIC_RELOCATION_GUARD_IMPORT_CONTROL_TRANSFER: u32 = 0x0000_0003;
2223pub const IMAGE_DYNAMIC_RELOCATION_GUARD_INDIR_CONTROL_TRANSFER: u32 = 0x0000_0004;
2224pub const IMAGE_DYNAMIC_RELOCATION_GUARD_SWITCHTABLE_BRANCH: u32 = 0x0000_0005;
2225
2226#[derive(Debug, Clone, Copy)]
2228#[repr(C)]
2229pub struct ImagePrologueDynamicRelocationHeader {
2230 pub prologue_byte_count: u8,
2231 }
2233
2234#[derive(Debug, Clone, Copy)]
2236#[repr(C)]
2237pub struct ImageEpilogueDynamicRelocationHeader {
2238 pub epilogue_count: U32Bytes<LE>,
2239 pub epilogue_byte_count: u8,
2240 pub branch_descriptor_element_size: u8,
2241 pub branch_descriptor_count: U16Bytes<LE>,
2242 }
2245
2246#[derive(Debug, Clone, Copy)]
2282#[repr(C)]
2283pub struct ImageLoadConfigDirectory32 {
2284 pub size: U32<LE>,
2285 pub time_date_stamp: U32<LE>,
2286 pub major_version: U16<LE>,
2287 pub minor_version: U16<LE>,
2288 pub global_flags_clear: U32<LE>,
2289 pub global_flags_set: U32<LE>,
2290 pub critical_section_default_timeout: U32<LE>,
2291 pub de_commit_free_block_threshold: U32<LE>,
2292 pub de_commit_total_free_threshold: U32<LE>,
2293 pub lock_prefix_table: U32<LE>,
2295 pub maximum_allocation_size: U32<LE>,
2296 pub virtual_memory_threshold: U32<LE>,
2297 pub process_heap_flags: U32<LE>,
2298 pub process_affinity_mask: U32<LE>,
2299 pub csd_version: U16<LE>,
2300 pub dependent_load_flags: U16<LE>,
2301 pub edit_list: U32<LE>,
2303 pub security_cookie: U32<LE>,
2305 pub sehandler_table: U32<LE>,
2307 pub sehandler_count: U32<LE>,
2308 pub guard_cf_check_function_pointer: U32<LE>,
2310 pub guard_cf_dispatch_function_pointer: U32<LE>,
2312 pub guard_cf_function_table: U32<LE>,
2314 pub guard_cf_function_count: U32<LE>,
2315 pub guard_flags: U32<LE>,
2316 pub code_integrity: ImageLoadConfigCodeIntegrity,
2317 pub guard_address_taken_iat_entry_table: U32<LE>,
2319 pub guard_address_taken_iat_entry_count: U32<LE>,
2320 pub guard_long_jump_target_table: U32<LE>,
2322 pub guard_long_jump_target_count: U32<LE>,
2323 pub dynamic_value_reloc_table: U32<LE>,
2325 pub chpe_metadata_pointer: U32<LE>,
2326 pub guard_rf_failure_routine: U32<LE>,
2328 pub guard_rf_failure_routine_function_pointer: U32<LE>,
2330 pub dynamic_value_reloc_table_offset: U32<LE>,
2331 pub dynamic_value_reloc_table_section: U16<LE>,
2332 pub reserved2: U16<LE>,
2333 pub guard_rf_verify_stack_pointer_function_pointer: U32<LE>,
2335 pub hot_patch_table_offset: U32<LE>,
2336 pub reserved3: U32<LE>,
2337 pub enclave_configuration_pointer: U32<LE>,
2339 pub volatile_metadata_pointer: U32<LE>,
2341}
2342
2343#[derive(Debug, Clone, Copy)]
2344#[repr(C)]
2345pub struct ImageLoadConfigDirectory64 {
2346 pub size: U32<LE>,
2347 pub time_date_stamp: U32<LE>,
2348 pub major_version: U16<LE>,
2349 pub minor_version: U16<LE>,
2350 pub global_flags_clear: U32<LE>,
2351 pub global_flags_set: U32<LE>,
2352 pub critical_section_default_timeout: U32<LE>,
2353 pub de_commit_free_block_threshold: U64<LE>,
2354 pub de_commit_total_free_threshold: U64<LE>,
2355 pub lock_prefix_table: U64<LE>,
2357 pub maximum_allocation_size: U64<LE>,
2358 pub virtual_memory_threshold: U64<LE>,
2359 pub process_affinity_mask: U64<LE>,
2360 pub process_heap_flags: U32<LE>,
2361 pub csd_version: U16<LE>,
2362 pub dependent_load_flags: U16<LE>,
2363 pub edit_list: U64<LE>,
2365 pub security_cookie: U64<LE>,
2367 pub sehandler_table: U64<LE>,
2369 pub sehandler_count: U64<LE>,
2370 pub guard_cf_check_function_pointer: U64<LE>,
2372 pub guard_cf_dispatch_function_pointer: U64<LE>,
2374 pub guard_cf_function_table: U64<LE>,
2376 pub guard_cf_function_count: U64<LE>,
2377 pub guard_flags: U32<LE>,
2378 pub code_integrity: ImageLoadConfigCodeIntegrity,
2379 pub guard_address_taken_iat_entry_table: U64<LE>,
2381 pub guard_address_taken_iat_entry_count: U64<LE>,
2382 pub guard_long_jump_target_table: U64<LE>,
2384 pub guard_long_jump_target_count: U64<LE>,
2385 pub dynamic_value_reloc_table: U64<LE>,
2387 pub chpe_metadata_pointer: U64<LE>,
2389 pub guard_rf_failure_routine: U64<LE>,
2391 pub guard_rf_failure_routine_function_pointer: U64<LE>,
2393 pub dynamic_value_reloc_table_offset: U32<LE>,
2394 pub dynamic_value_reloc_table_section: U16<LE>,
2395 pub reserved2: U16<LE>,
2396 pub guard_rf_verify_stack_pointer_function_pointer: U64<LE>,
2398 pub hot_patch_table_offset: U32<LE>,
2399 pub reserved3: U32<LE>,
2400 pub enclave_configuration_pointer: U64<LE>,
2402 pub volatile_metadata_pointer: U64<LE>,
2404}
2405
2406#[derive(Debug, Clone, Copy)]
2407#[repr(C)]
2408pub struct ImageHotPatchInfo {
2409 pub version: U32<LE>,
2410 pub size: U32<LE>,
2411 pub sequence_number: U32<LE>,
2412 pub base_image_list: U32<LE>,
2413 pub base_image_count: U32<LE>,
2414 pub buffer_offset: U32<LE>,
2416 pub extra_patch_size: U32<LE>,
2418}
2419
2420#[derive(Debug, Clone, Copy)]
2421#[repr(C)]
2422pub struct ImageHotPatchBase {
2423 pub sequence_number: U32<LE>,
2424 pub flags: U32<LE>,
2425 pub original_time_date_stamp: U32<LE>,
2426 pub original_check_sum: U32<LE>,
2427 pub code_integrity_info: U32<LE>,
2428 pub code_integrity_size: U32<LE>,
2429 pub patch_table: U32<LE>,
2430 pub buffer_offset: U32<LE>,
2432}
2433
2434#[derive(Debug, Clone, Copy)]
2435#[repr(C)]
2436pub struct ImageHotPatchHashes {
2437 pub sha256: [u8; 32],
2438 pub sha1: [u8; 20],
2439}
2440
2441pub const IMAGE_HOT_PATCH_BASE_OBLIGATORY: u32 = 0x0000_0001;
2442pub const IMAGE_HOT_PATCH_BASE_CAN_ROLL_BACK: u32 = 0x0000_0002;
2443
2444pub const IMAGE_HOT_PATCH_CHUNK_INVERSE: u32 = 0x8000_0000;
2445pub const IMAGE_HOT_PATCH_CHUNK_OBLIGATORY: u32 = 0x4000_0000;
2446pub const IMAGE_HOT_PATCH_CHUNK_RESERVED: u32 = 0x3FF0_3000;
2447pub const IMAGE_HOT_PATCH_CHUNK_TYPE: u32 = 0x000F_C000;
2448pub const IMAGE_HOT_PATCH_CHUNK_SOURCE_RVA: u32 = 0x0000_8000;
2449pub const IMAGE_HOT_PATCH_CHUNK_TARGET_RVA: u32 = 0x0000_4000;
2450pub const IMAGE_HOT_PATCH_CHUNK_SIZE: u32 = 0x0000_0FFF;
2451
2452pub const IMAGE_HOT_PATCH_NONE: u32 = 0x0000_0000;
2453pub const IMAGE_HOT_PATCH_FUNCTION: u32 = 0x0001_C000;
2454pub const IMAGE_HOT_PATCH_ABSOLUTE: u32 = 0x0002_C000;
2455pub const IMAGE_HOT_PATCH_REL32: u32 = 0x0003_C000;
2456pub const IMAGE_HOT_PATCH_CALL_TARGET: u32 = 0x0004_4000;
2457pub const IMAGE_HOT_PATCH_INDIRECT: u32 = 0x0005_C000;
2458pub const IMAGE_HOT_PATCH_NO_CALL_TARGET: u32 = 0x0006_4000;
2459pub const IMAGE_HOT_PATCH_DYNAMIC_VALUE: u32 = 0x0007_8000;
2460
2461pub const IMAGE_GUARD_CF_INSTRUMENTED: u32 = 0x0000_0100;
2463pub const IMAGE_GUARD_CFW_INSTRUMENTED: u32 = 0x0000_0200;
2465pub const IMAGE_GUARD_CF_FUNCTION_TABLE_PRESENT: u32 = 0x0000_0400;
2467pub const IMAGE_GUARD_SECURITY_COOKIE_UNUSED: u32 = 0x0000_0800;
2469pub const IMAGE_GUARD_PROTECT_DELAYLOAD_IAT: u32 = 0x0000_1000;
2471pub const IMAGE_GUARD_DELAYLOAD_IAT_IN_ITS_OWN_SECTION: u32 = 0x0000_2000;
2473pub const IMAGE_GUARD_CF_EXPORT_SUPPRESSION_INFO_PRESENT: u32 = 0x0000_4000;
2477pub const IMAGE_GUARD_CF_ENABLE_EXPORT_SUPPRESSION: u32 = 0x0000_8000;
2479pub const IMAGE_GUARD_CF_LONGJUMP_TABLE_PRESENT: u32 = 0x0001_0000;
2481pub const IMAGE_GUARD_RF_INSTRUMENTED: u32 = 0x0002_0000;
2483pub const IMAGE_GUARD_RF_ENABLE: u32 = 0x0004_0000;
2485pub const IMAGE_GUARD_RF_STRICT: u32 = 0x0008_0000;
2487pub const IMAGE_GUARD_RETPOLINE_PRESENT: u32 = 0x0010_0000;
2489
2490pub const IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_MASK: u32 = 0xF000_0000;
2492pub const IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_SHIFT: u32 = 28;
2494
2495pub const IMAGE_GUARD_FLAG_FID_SUPPRESSED: u16 = 0x01;
2501pub const IMAGE_GUARD_FLAG_EXPORT_SUPPRESSED: u16 = 0x02;
2503
2504#[derive(Debug, Clone, Copy)]
2527#[repr(C)]
2528pub struct ImageArmRuntimeFunctionEntry {
2529 pub begin_address: U32<LE>,
2530 pub unwind_data: U32<LE>,
2531}
2532
2533#[derive(Debug, Clone, Copy)]
2534#[repr(C)]
2535pub struct ImageArm64RuntimeFunctionEntry {
2536 pub begin_address: U32<LE>,
2537 pub unwind_data: U32<LE>,
2538}
2539
2540#[derive(Debug, Clone, Copy)]
2541#[repr(C)]
2542pub struct ImageAlpha64RuntimeFunctionEntry {
2543 pub begin_address: U64<LE>,
2544 pub end_address: U64<LE>,
2545 pub exception_handler: U64<LE>,
2546 pub handler_data: U64<LE>,
2547 pub prolog_end_address: U64<LE>,
2548}
2549
2550#[derive(Debug, Clone, Copy)]
2551#[repr(C)]
2552pub struct ImageAlphaRuntimeFunctionEntry {
2553 pub begin_address: U32<LE>,
2554 pub end_address: U32<LE>,
2555 pub exception_handler: U32<LE>,
2556 pub handler_data: U32<LE>,
2557 pub prolog_end_address: U32<LE>,
2558}
2559
2560#[derive(Debug, Clone, Copy)]
2561#[repr(C)]
2562pub struct ImageRuntimeFunctionEntry {
2563 pub begin_address: U32<LE>,
2564 pub end_address: U32<LE>,
2565 pub unwind_info_address_or_data: U32<LE>,
2566}
2567
2568pub const IMAGE_ENCLAVE_LONG_ID_LENGTH: usize = 32;
2573pub const IMAGE_ENCLAVE_SHORT_ID_LENGTH: usize = 16;
2574
2575#[derive(Debug, Clone, Copy)]
2576#[repr(C)]
2577pub struct ImageEnclaveConfig32 {
2578 pub size: U32<LE>,
2579 pub minimum_required_config_size: U32<LE>,
2580 pub policy_flags: U32<LE>,
2581 pub number_of_imports: U32<LE>,
2582 pub import_list: U32<LE>,
2583 pub import_entry_size: U32<LE>,
2584 pub family_id: [u8; IMAGE_ENCLAVE_SHORT_ID_LENGTH],
2585 pub image_id: [u8; IMAGE_ENCLAVE_SHORT_ID_LENGTH],
2586 pub image_version: U32<LE>,
2587 pub security_version: U32<LE>,
2588 pub enclave_size: U32<LE>,
2589 pub number_of_threads: U32<LE>,
2590 pub enclave_flags: U32<LE>,
2591}
2592
2593#[derive(Debug, Clone, Copy)]
2594#[repr(C)]
2595pub struct ImageEnclaveConfig64 {
2596 pub size: U32<LE>,
2597 pub minimum_required_config_size: U32<LE>,
2598 pub policy_flags: U32<LE>,
2599 pub number_of_imports: U32<LE>,
2600 pub import_list: U32<LE>,
2601 pub import_entry_size: U32<LE>,
2602 pub family_id: [u8; IMAGE_ENCLAVE_SHORT_ID_LENGTH],
2603 pub image_id: [u8; IMAGE_ENCLAVE_SHORT_ID_LENGTH],
2604 pub image_version: U32<LE>,
2605 pub security_version: U32<LE>,
2606 pub enclave_size: U64<LE>,
2607 pub number_of_threads: U32<LE>,
2608 pub enclave_flags: U32<LE>,
2609}
2610
2611pub const IMAGE_ENCLAVE_POLICY_DEBUGGABLE: u32 = 0x0000_0001;
2614
2615pub const IMAGE_ENCLAVE_FLAG_PRIMARY_IMAGE: u32 = 0x0000_0001;
2616
2617#[derive(Debug, Clone, Copy)]
2618#[repr(C)]
2619pub struct ImageEnclaveImport {
2620 pub match_type: U32<LE>,
2621 pub minimum_security_version: U32<LE>,
2622 pub unique_or_author_id: [u8; IMAGE_ENCLAVE_LONG_ID_LENGTH],
2623 pub family_id: [u8; IMAGE_ENCLAVE_SHORT_ID_LENGTH],
2624 pub image_id: [u8; IMAGE_ENCLAVE_SHORT_ID_LENGTH],
2625 pub import_name: U32<LE>,
2626 pub reserved: U32<LE>,
2627}
2628
2629pub const IMAGE_ENCLAVE_IMPORT_MATCH_NONE: u32 = 0x0000_0000;
2630pub const IMAGE_ENCLAVE_IMPORT_MATCH_UNIQUE_ID: u32 = 0x0000_0001;
2631pub const IMAGE_ENCLAVE_IMPORT_MATCH_AUTHOR_ID: u32 = 0x0000_0002;
2632pub const IMAGE_ENCLAVE_IMPORT_MATCH_FAMILY_ID: u32 = 0x0000_0003;
2633pub const IMAGE_ENCLAVE_IMPORT_MATCH_IMAGE_ID: u32 = 0x0000_0004;
2634
2635#[derive(Debug, Clone, Copy)]
2640#[repr(C)]
2641pub struct ImageDebugDirectory {
2642 pub characteristics: U32<LE>,
2643 pub time_date_stamp: U32<LE>,
2644 pub major_version: U16<LE>,
2645 pub minor_version: U16<LE>,
2646 pub typ: U32<LE>,
2647 pub size_of_data: U32<LE>,
2648 pub address_of_raw_data: U32<LE>,
2649 pub pointer_to_raw_data: U32<LE>,
2650}
2651
2652pub const IMAGE_DEBUG_TYPE_UNKNOWN: u32 = 0;
2653pub const IMAGE_DEBUG_TYPE_COFF: u32 = 1;
2654pub const IMAGE_DEBUG_TYPE_CODEVIEW: u32 = 2;
2655pub const IMAGE_DEBUG_TYPE_FPO: u32 = 3;
2656pub const IMAGE_DEBUG_TYPE_MISC: u32 = 4;
2657pub const IMAGE_DEBUG_TYPE_EXCEPTION: u32 = 5;
2658pub const IMAGE_DEBUG_TYPE_FIXUP: u32 = 6;
2659pub const IMAGE_DEBUG_TYPE_OMAP_TO_SRC: u32 = 7;
2660pub const IMAGE_DEBUG_TYPE_OMAP_FROM_SRC: u32 = 8;
2661pub const IMAGE_DEBUG_TYPE_BORLAND: u32 = 9;
2662pub const IMAGE_DEBUG_TYPE_RESERVED10: u32 = 10;
2663pub const IMAGE_DEBUG_TYPE_CLSID: u32 = 11;
2664pub const IMAGE_DEBUG_TYPE_VC_FEATURE: u32 = 12;
2665pub const IMAGE_DEBUG_TYPE_POGO: u32 = 13;
2666pub const IMAGE_DEBUG_TYPE_ILTCG: u32 = 14;
2667pub const IMAGE_DEBUG_TYPE_MPX: u32 = 15;
2668pub const IMAGE_DEBUG_TYPE_REPRO: u32 = 16;
2669
2670#[derive(Debug, Clone, Copy)]
2671#[repr(C)]
2672pub struct ImageCoffSymbolsHeader {
2673 pub number_of_symbols: U32<LE>,
2674 pub lva_to_first_symbol: U32<LE>,
2675 pub number_of_linenumbers: U32<LE>,
2676 pub lva_to_first_linenumber: U32<LE>,
2677 pub rva_to_first_byte_of_code: U32<LE>,
2678 pub rva_to_last_byte_of_code: U32<LE>,
2679 pub rva_to_first_byte_of_data: U32<LE>,
2680 pub rva_to_last_byte_of_data: U32<LE>,
2681}
2682
2683pub const FRAME_FPO: u16 = 0;
2684pub const FRAME_TRAP: u16 = 1;
2685pub const FRAME_TSS: u16 = 2;
2686pub const FRAME_NONFPO: u16 = 3;
2687
2688pub const IMAGE_DEBUG_MISC_EXENAME: u16 = 1;
2718
2719#[derive(Debug, Clone, Copy)]
2720#[repr(C)]
2721pub struct ImageDebugMisc {
2722 pub data_type: U32<LE>,
2724 pub length: U32<LE>,
2726 pub unicode: u8,
2728 pub reserved: [u8; 3],
2729 }
2732
2733#[derive(Debug, Clone, Copy)]
2740#[repr(C)]
2741pub struct ImageFunctionEntry {
2742 pub starting_address: U32<LE>,
2743 pub ending_address: U32<LE>,
2744 pub end_of_prologue: U32<LE>,
2745}
2746
2747#[derive(Debug, Clone, Copy)]
2748#[repr(C)]
2749pub struct ImageFunctionEntry64 {
2750 pub starting_address: U64<LE>,
2751 pub ending_address: U64<LE>,
2752 pub end_of_prologue_or_unwind_info_address: U64<LE>,
2753}
2754
2755#[derive(Debug, Clone, Copy)]
2776#[repr(C)]
2777pub struct ImageSeparateDebugHeader {
2778 pub signature: U16<LE>,
2779 pub flags: U16<LE>,
2780 pub machine: U16<LE>,
2781 pub characteristics: U16<LE>,
2782 pub time_date_stamp: U32<LE>,
2783 pub check_sum: U32<LE>,
2784 pub image_base: U32<LE>,
2785 pub size_of_image: U32<LE>,
2786 pub number_of_sections: U32<LE>,
2787 pub exported_names_size: U32<LE>,
2788 pub debug_directory_size: U32<LE>,
2789 pub section_alignment: U32<LE>,
2790 pub reserved: [U32<LE>; 2],
2791}
2792
2793#[derive(Debug, Clone, Copy)]
2794#[repr(C)]
2795pub struct NonPagedDebugInfo {
2796 pub signature: U16<LE>,
2797 pub flags: U16<LE>,
2798 pub size: U32<LE>,
2799 pub machine: U16<LE>,
2800 pub characteristics: U16<LE>,
2801 pub time_date_stamp: U32<LE>,
2802 pub check_sum: U32<LE>,
2803 pub size_of_image: U32<LE>,
2804 pub image_base: U64<LE>,
2805 }
2808
2809pub const IMAGE_SEPARATE_DEBUG_SIGNATURE: u16 = 0x4944;
2810pub const NON_PAGED_DEBUG_SIGNATURE: u16 = 0x494E;
2811
2812pub const IMAGE_SEPARATE_DEBUG_FLAGS_MASK: u16 = 0x8000;
2813pub const IMAGE_SEPARATE_DEBUG_MISMATCH: u16 = 0x8000;
2815
2816#[derive(Debug, Clone, Copy)]
2844#[repr(C)]
2845pub struct ImageArchitectureEntry {
2846 pub fixup_inst_rva: U32<LE>,
2848 pub new_inst: U32<LE>,
2850}
2851
2852pub const IMPORT_OBJECT_HDR_SIG2: u16 = 0xffff;
2858
2859#[derive(Debug, Clone, Copy)]
2860#[repr(C)]
2861pub struct ImportObjectHeader {
2862 pub sig1: U16<LE>,
2864 pub sig2: U16<LE>,
2866 pub version: U16<LE>,
2867 pub machine: U16<LE>,
2868 pub time_date_stamp: U32<LE>,
2870 pub size_of_data: U32<LE>,
2872
2873 pub ordinal_or_hint: U16<LE>,
2875
2876 pub name_type: U16<LE>,
2880}
2881
2882pub const IMPORT_OBJECT_TYPE_MASK: u16 = 0b11;
2883pub const IMPORT_OBJECT_TYPE_SHIFT: u16 = 0;
2884pub const IMPORT_OBJECT_CODE: u16 = 0;
2885pub const IMPORT_OBJECT_DATA: u16 = 1;
2886pub const IMPORT_OBJECT_CONST: u16 = 2;
2887
2888pub const IMPORT_OBJECT_NAME_MASK: u16 = 0b111;
2889pub const IMPORT_OBJECT_NAME_SHIFT: u16 = 2;
2890pub const IMPORT_OBJECT_ORDINAL: u16 = 0;
2892pub const IMPORT_OBJECT_NAME: u16 = 1;
2894pub const IMPORT_OBJECT_NAME_NO_PREFIX: u16 = 2;
2896pub const IMPORT_OBJECT_NAME_UNDECORATE: u16 = 3;
2898pub const IMPORT_OBJECT_NAME_EXPORTAS: u16 = 4;
2900
2901pub const COMIMAGE_FLAGS_ILONLY: u32 = 0x0000_0001;
2903pub const COMIMAGE_FLAGS_32BITREQUIRED: u32 = 0x0000_0002;
2904pub const COMIMAGE_FLAGS_IL_LIBRARY: u32 = 0x0000_0004;
2905pub const COMIMAGE_FLAGS_STRONGNAMESIGNED: u32 = 0x0000_0008;
2906pub const COMIMAGE_FLAGS_NATIVE_ENTRYPOINT: u32 = 0x0000_0010;
2907pub const COMIMAGE_FLAGS_TRACKDEBUGDATA: u32 = 0x0001_0000;
2908pub const COMIMAGE_FLAGS_32BITPREFERRED: u32 = 0x0002_0000;
2909
2910pub const COR_VERSION_MAJOR_V2: u16 = 2;
2912pub const COR_VERSION_MAJOR: u16 = COR_VERSION_MAJOR_V2;
2913pub const COR_VERSION_MINOR: u16 = 5;
2914pub const COR_DELETED_NAME_LENGTH: usize = 8;
2915pub const COR_VTABLEGAP_NAME_LENGTH: usize = 8;
2916
2917pub const NATIVE_TYPE_MAX_CB: u16 = 1;
2919pub const COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE: u16 = 0xFF;
2920
2921pub const IMAGE_COR_MIH_METHODRVA: u16 = 0x01;
2923pub const IMAGE_COR_MIH_EHRVA: u16 = 0x02;
2924pub const IMAGE_COR_MIH_BASICBLOCK: u16 = 0x08;
2925
2926pub const COR_VTABLE_32BIT: u16 = 0x01;
2929pub const COR_VTABLE_64BIT: u16 = 0x02;
2931pub const COR_VTABLE_FROM_UNMANAGED: u16 = 0x04;
2933pub const COR_VTABLE_FROM_UNMANAGED_RETAIN_APPDOMAIN: u16 = 0x08;
2935pub const COR_VTABLE_CALL_MOST_DERIVED: u16 = 0x10;
2937
2938pub const IMAGE_COR_EATJ_THUNK_SIZE: usize = 32;
2941
2942pub const MAX_CLASS_NAME: usize = 1024;
2944pub const MAX_PACKAGE_NAME: usize = 1024;
2945
2946#[derive(Debug, Clone, Copy)]
2948#[repr(C)]
2949pub struct ImageCor20Header {
2950 pub cb: U32<LE>,
2952 pub major_runtime_version: U16<LE>,
2953 pub minor_runtime_version: U16<LE>,
2954
2955 pub meta_data: ImageDataDirectory,
2957 pub flags: U32<LE>,
2958
2959 pub entry_point_token_or_rva: U32<LE>,
2962
2963 pub resources: ImageDataDirectory,
2965 pub strong_name_signature: ImageDataDirectory,
2966
2967 pub code_manager_table: ImageDataDirectory,
2969 pub vtable_fixups: ImageDataDirectory,
2970 pub export_address_table_jumps: ImageDataDirectory,
2971
2972 pub managed_native_header: ImageDataDirectory,
2974}
2975
2976unsafe_impl_pod!(
2977 ImageDosHeader,
2978 ImageOs2Header,
2979 ImageVxdHeader,
2980 ImageFileHeader,
2981 ImageDataDirectory,
2982 ImageOptionalHeader32,
2983 ImageRomOptionalHeader,
2984 ImageOptionalHeader64,
2985 ImageNtHeaders64,
2986 ImageNtHeaders32,
2987 ImageRomHeaders,
2988 Guid,
2989 AnonObjectHeader,
2990 AnonObjectHeaderV2,
2991 AnonObjectHeaderBigobj,
2992 ImageSectionHeader,
2993 ImageSymbol,
2994 ImageSymbolBytes,
2995 ImageSymbolEx,
2996 ImageSymbolExBytes,
2997 ImageAuxSymbolTokenDef,
2998 ImageAuxSymbolFunction,
2999 ImageAuxSymbolFunctionBeginEnd,
3000 ImageAuxSymbolWeak,
3001 ImageAuxSymbolSection,
3002 ImageAuxSymbolCrc,
3003 ImageRelocation,
3004 ImageLinenumber,
3005 ImageBaseRelocation,
3006 ImageArchiveMemberHeader,
3007 ImageExportDirectory,
3008 ImageImportByName,
3009 ImageThunkData64,
3010 ImageThunkData32,
3011 ImageTlsDirectory64,
3012 ImageTlsDirectory32,
3013 ImageImportDescriptor,
3014 ImageBoundImportDescriptor,
3015 ImageBoundForwarderRef,
3016 ImageDelayloadDescriptor,
3017 ImageResourceDirectory,
3018 ImageResourceDirectoryEntry,
3019 ImageResourceDirectoryString,
3020 ImageResourceDirStringU,
3021 ImageResourceDataEntry,
3022 ImageLoadConfigCodeIntegrity,
3023 ImageDynamicRelocationTable,
3024 ImageDynamicRelocation32,
3025 ImageDynamicRelocation64,
3026 ImageDynamicRelocation32V2,
3027 ImageDynamicRelocation64V2,
3028 ImagePrologueDynamicRelocationHeader,
3029 ImageEpilogueDynamicRelocationHeader,
3030 ImageLoadConfigDirectory32,
3034 ImageLoadConfigDirectory64,
3035 ImageHotPatchInfo,
3036 ImageHotPatchBase,
3037 ImageHotPatchHashes,
3038 ImageArmRuntimeFunctionEntry,
3040 ImageArm64RuntimeFunctionEntry,
3041 ImageAlpha64RuntimeFunctionEntry,
3042 ImageAlphaRuntimeFunctionEntry,
3043 ImageRuntimeFunctionEntry,
3044 ImageEnclaveConfig32,
3045 ImageEnclaveConfig64,
3046 ImageEnclaveImport,
3047 ImageDebugDirectory,
3048 ImageCoffSymbolsHeader,
3049 ImageDebugMisc,
3051 ImageFunctionEntry,
3052 ImageFunctionEntry64,
3053 ImageSeparateDebugHeader,
3054 NonPagedDebugInfo,
3055 ImageArchitectureEntry,
3057 ImportObjectHeader,
3058 ImageCor20Header,
3059 MaskedRichHeaderEntry,
3060);