1#![allow(missing_docs)]
9
10use core::convert::TryInto;
11
12use crate::endian::{LittleEndian as LE, 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_POWERPCBE: u16 = 0x01f2;
342pub const IMAGE_FILE_MACHINE_IA64: u16 = 0x0200;
344pub const IMAGE_FILE_MACHINE_MIPS16: u16 = 0x0266;
346pub const IMAGE_FILE_MACHINE_ALPHA64: u16 = 0x0284;
348pub const IMAGE_FILE_MACHINE_MIPSFPU: u16 = 0x0366;
350pub const IMAGE_FILE_MACHINE_MIPSFPU16: u16 = 0x0466;
352pub const IMAGE_FILE_MACHINE_AXP64: u16 = IMAGE_FILE_MACHINE_ALPHA64;
353pub const IMAGE_FILE_MACHINE_TRICORE: u16 = 0x0520;
355pub const IMAGE_FILE_MACHINE_CEF: u16 = 0x0CEF;
356pub const IMAGE_FILE_MACHINE_EBC: u16 = 0x0EBC;
358pub const IMAGE_FILE_MACHINE_AMD64: u16 = 0x8664;
360pub const IMAGE_FILE_MACHINE_M32R: u16 = 0x9041;
362pub const IMAGE_FILE_MACHINE_ARM64: u16 = 0xAA64;
364pub const IMAGE_FILE_MACHINE_ARM64EC: u16 = 0xA641;
366pub const IMAGE_FILE_MACHINE_CEE: u16 = 0xC0EE;
367pub const IMAGE_FILE_MACHINE_RISCV32: u16 = 0x5032;
369pub const IMAGE_FILE_MACHINE_RISCV64: u16 = 0x5064;
371pub const IMAGE_FILE_MACHINE_RISCV128: u16 = 0x5128;
373pub const IMAGE_FILE_MACHINE_ARM64X: u16 = 0xA64E;
375pub const IMAGE_FILE_MACHINE_CHPE_X86: u16 = 0x3A64;
377
378#[derive(Debug, Clone, Copy)]
383#[repr(C)]
384pub struct ImageDataDirectory {
385 pub virtual_address: U32<LE>,
386 pub size: U32<LE>,
387}
388
389pub const IMAGE_NUMBEROF_DIRECTORY_ENTRIES: usize = 16;
390
391#[derive(Debug, Clone, Copy)]
396#[repr(C)]
397pub struct ImageOptionalHeader32 {
398 pub magic: U16<LE>,
400 pub major_linker_version: u8,
401 pub minor_linker_version: u8,
402 pub size_of_code: U32<LE>,
403 pub size_of_initialized_data: U32<LE>,
404 pub size_of_uninitialized_data: U32<LE>,
405 pub address_of_entry_point: U32<LE>,
406 pub base_of_code: U32<LE>,
407 pub base_of_data: U32<LE>,
408
409 pub image_base: U32<LE>,
411 pub section_alignment: U32<LE>,
412 pub file_alignment: U32<LE>,
413 pub major_operating_system_version: U16<LE>,
414 pub minor_operating_system_version: U16<LE>,
415 pub major_image_version: U16<LE>,
416 pub minor_image_version: U16<LE>,
417 pub major_subsystem_version: U16<LE>,
418 pub minor_subsystem_version: U16<LE>,
419 pub win32_version_value: U32<LE>,
420 pub size_of_image: U32<LE>,
421 pub size_of_headers: U32<LE>,
422 pub check_sum: U32<LE>,
423 pub subsystem: U16<LE>,
424 pub dll_characteristics: U16<LE>,
425 pub size_of_stack_reserve: U32<LE>,
426 pub size_of_stack_commit: U32<LE>,
427 pub size_of_heap_reserve: U32<LE>,
428 pub size_of_heap_commit: U32<LE>,
429 pub loader_flags: U32<LE>,
430 pub number_of_rva_and_sizes: U32<LE>,
431 }
433
434#[derive(Debug, Clone, Copy)]
435#[repr(C)]
436pub struct ImageRomOptionalHeader {
437 pub magic: U16<LE>,
438 pub major_linker_version: u8,
439 pub minor_linker_version: u8,
440 pub size_of_code: U32<LE>,
441 pub size_of_initialized_data: U32<LE>,
442 pub size_of_uninitialized_data: U32<LE>,
443 pub address_of_entry_point: U32<LE>,
444 pub base_of_code: U32<LE>,
445 pub base_of_data: U32<LE>,
446 pub base_of_bss: U32<LE>,
447 pub gpr_mask: U32<LE>,
448 pub cpr_mask: [U32<LE>; 4],
449 pub gp_value: U32<LE>,
450}
451
452#[derive(Debug, Clone, Copy)]
453#[repr(C)]
454pub struct ImageOptionalHeader64 {
455 pub magic: U16<LE>,
456 pub major_linker_version: u8,
457 pub minor_linker_version: u8,
458 pub size_of_code: U32<LE>,
459 pub size_of_initialized_data: U32<LE>,
460 pub size_of_uninitialized_data: U32<LE>,
461 pub address_of_entry_point: U32<LE>,
462 pub base_of_code: U32<LE>,
463 pub image_base: U64<LE>,
464 pub section_alignment: U32<LE>,
465 pub file_alignment: U32<LE>,
466 pub major_operating_system_version: U16<LE>,
467 pub minor_operating_system_version: U16<LE>,
468 pub major_image_version: U16<LE>,
469 pub minor_image_version: U16<LE>,
470 pub major_subsystem_version: U16<LE>,
471 pub minor_subsystem_version: U16<LE>,
472 pub win32_version_value: U32<LE>,
473 pub size_of_image: U32<LE>,
474 pub size_of_headers: U32<LE>,
475 pub check_sum: U32<LE>,
476 pub subsystem: U16<LE>,
477 pub dll_characteristics: U16<LE>,
478 pub size_of_stack_reserve: U64<LE>,
479 pub size_of_stack_commit: U64<LE>,
480 pub size_of_heap_reserve: U64<LE>,
481 pub size_of_heap_commit: U64<LE>,
482 pub loader_flags: U32<LE>,
483 pub number_of_rva_and_sizes: U32<LE>,
484 }
486
487pub const IMAGE_NT_OPTIONAL_HDR32_MAGIC: u16 = 0x10b;
488pub const IMAGE_NT_OPTIONAL_HDR64_MAGIC: u16 = 0x20b;
489pub const IMAGE_ROM_OPTIONAL_HDR_MAGIC: u16 = 0x107;
490
491#[derive(Debug, Clone, Copy)]
492#[repr(C)]
493pub struct ImageNtHeaders64 {
494 pub signature: U32<LE>,
495 pub file_header: ImageFileHeader,
496 pub optional_header: ImageOptionalHeader64,
497}
498
499#[derive(Debug, Clone, Copy)]
500#[repr(C)]
501pub struct ImageNtHeaders32 {
502 pub signature: U32<LE>,
503 pub file_header: ImageFileHeader,
504 pub optional_header: ImageOptionalHeader32,
505}
506
507#[derive(Debug, Clone, Copy)]
508#[repr(C)]
509pub struct ImageRomHeaders {
510 pub file_header: ImageFileHeader,
511 pub optional_header: ImageRomOptionalHeader,
512}
513
514pub const IMAGE_SUBSYSTEM_UNKNOWN: u16 = 0;
518pub const IMAGE_SUBSYSTEM_NATIVE: u16 = 1;
520pub const IMAGE_SUBSYSTEM_WINDOWS_GUI: u16 = 2;
522pub const IMAGE_SUBSYSTEM_WINDOWS_CUI: u16 = 3;
524pub const IMAGE_SUBSYSTEM_OS2_CUI: u16 = 5;
526pub const IMAGE_SUBSYSTEM_POSIX_CUI: u16 = 7;
528pub const IMAGE_SUBSYSTEM_NATIVE_WINDOWS: u16 = 8;
530pub const IMAGE_SUBSYSTEM_WINDOWS_CE_GUI: u16 = 9;
532pub const IMAGE_SUBSYSTEM_EFI_APPLICATION: u16 = 10;
533pub const IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER: u16 = 11;
534pub const IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER: u16 = 12;
535pub const IMAGE_SUBSYSTEM_EFI_ROM: u16 = 13;
536pub const IMAGE_SUBSYSTEM_XBOX: u16 = 14;
537pub const IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION: u16 = 16;
538pub const IMAGE_SUBSYSTEM_XBOX_CODE_CATALOG: u16 = 17;
539
540pub const IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA: u16 = 0x0020;
548pub const IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE: u16 = 0x0040;
550pub const IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY: u16 = 0x0080;
552pub const IMAGE_DLLCHARACTERISTICS_NX_COMPAT: u16 = 0x0100;
554pub const IMAGE_DLLCHARACTERISTICS_NO_ISOLATION: u16 = 0x0200;
556pub const IMAGE_DLLCHARACTERISTICS_NO_SEH: u16 = 0x0400;
558pub const IMAGE_DLLCHARACTERISTICS_NO_BIND: u16 = 0x0800;
560pub const IMAGE_DLLCHARACTERISTICS_APPCONTAINER: u16 = 0x1000;
562pub const IMAGE_DLLCHARACTERISTICS_WDM_DRIVER: u16 = 0x2000;
564pub const IMAGE_DLLCHARACTERISTICS_GUARD_CF: u16 = 0x4000;
566pub const IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE: u16 = 0x8000;
567
568pub const IMAGE_DIRECTORY_ENTRY_EXPORT: usize = 0;
572pub const IMAGE_DIRECTORY_ENTRY_IMPORT: usize = 1;
574pub const IMAGE_DIRECTORY_ENTRY_RESOURCE: usize = 2;
576pub const IMAGE_DIRECTORY_ENTRY_EXCEPTION: usize = 3;
578pub const IMAGE_DIRECTORY_ENTRY_SECURITY: usize = 4;
580pub const IMAGE_DIRECTORY_ENTRY_BASERELOC: usize = 5;
582pub const IMAGE_DIRECTORY_ENTRY_DEBUG: usize = 6;
584pub const IMAGE_DIRECTORY_ENTRY_ARCHITECTURE: usize = 7;
587pub const IMAGE_DIRECTORY_ENTRY_GLOBALPTR: usize = 8;
589pub const IMAGE_DIRECTORY_ENTRY_TLS: usize = 9;
591pub const IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG: usize = 10;
593pub const IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT: usize = 11;
595pub const IMAGE_DIRECTORY_ENTRY_IAT: usize = 12;
597pub const IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT: usize = 13;
599pub const IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR: usize = 14;
601
602#[derive(Debug, Clone, Copy, PartialEq, Eq)]
603#[repr(C)]
604pub struct Guid(pub [u8; 16]);
605
606impl Guid {
607 #[inline]
608 pub fn data1(self) -> U32<LE> {
609 U32::from_bytes(self.0[0..4].try_into().unwrap())
610 }
611
612 #[inline]
613 pub fn data2(self) -> U16<LE> {
614 U16::from_bytes(self.0[4..6].try_into().unwrap())
615 }
616
617 #[inline]
618 pub fn data3(self) -> U16<LE> {
619 U16::from_bytes(self.0[6..8].try_into().unwrap())
620 }
621
622 #[inline]
623 pub fn data4(self) -> [u8; 8] {
624 self.0[8..16].try_into().unwrap()
625 }
626}
627
628pub use Guid as ClsId;
629
630#[derive(Debug, Clone, Copy)]
632#[repr(C)]
633pub struct AnonObjectHeader {
634 pub sig1: U16<LE>,
636 pub sig2: U16<LE>,
638 pub version: U16<LE>,
640 pub machine: U16<LE>,
641 pub time_date_stamp: U32<LE>,
642 pub class_id: ClsId,
644 pub size_of_data: U32<LE>,
646}
647
648#[derive(Debug, Clone, Copy)]
649#[repr(C)]
650pub struct AnonObjectHeaderV2 {
651 pub sig1: U16<LE>,
653 pub sig2: U16<LE>,
655 pub version: U16<LE>,
657 pub machine: U16<LE>,
658 pub time_date_stamp: U32<LE>,
659 pub class_id: ClsId,
661 pub size_of_data: U32<LE>,
663 pub flags: U32<LE>,
665 pub meta_data_size: U32<LE>,
667 pub meta_data_offset: U32<LE>,
669}
670
671pub const ANON_OBJECT_HEADER_BIGOBJ_CLASS_ID: ClsId = ClsId([
673 0xC7, 0xA1, 0xBA, 0xD1, 0xEE, 0xBA, 0xA9, 0x4B, 0xAF, 0x20, 0xFA, 0xF6, 0x6A, 0xA4, 0xDC, 0xB8,
674]);
675
676#[derive(Debug, Clone, Copy)]
677#[repr(C)]
678pub struct AnonObjectHeaderBigobj {
679 pub sig1: U16<LE>,
682 pub sig2: U16<LE>,
684 pub version: U16<LE>,
686 pub machine: U16<LE>,
688 pub time_date_stamp: U32<LE>,
689 pub class_id: ClsId,
691 pub size_of_data: U32<LE>,
693 pub flags: U32<LE>,
695 pub meta_data_size: U32<LE>,
697 pub meta_data_offset: U32<LE>,
699
700 pub number_of_sections: U32<LE>,
703 pub pointer_to_symbol_table: U32<LE>,
704 pub number_of_symbols: U32<LE>,
705}
706
707pub const IMAGE_SIZEOF_SHORT_NAME: usize = 8;
708
709#[derive(Debug, Default, Clone, Copy)]
714#[repr(C)]
715pub struct ImageSectionHeader {
716 pub name: [u8; IMAGE_SIZEOF_SHORT_NAME],
717 pub virtual_size: U32<LE>,
718 pub virtual_address: U32<LE>,
719 pub size_of_raw_data: U32<LE>,
720 pub pointer_to_raw_data: U32<LE>,
721 pub pointer_to_relocations: U32<LE>,
722 pub pointer_to_linenumbers: U32<LE>,
723 pub number_of_relocations: U16<LE>,
724 pub number_of_linenumbers: U16<LE>,
725 pub characteristics: U32<LE>,
726}
727
728pub const IMAGE_SIZEOF_SECTION_HEADER: usize = 40;
729
730pub const IMAGE_SCN_TYPE_NO_PAD: u32 = 0x0000_0008;
738pub const IMAGE_SCN_CNT_CODE: u32 = 0x0000_0020;
742pub const IMAGE_SCN_CNT_INITIALIZED_DATA: u32 = 0x0000_0040;
744pub const IMAGE_SCN_CNT_UNINITIALIZED_DATA: u32 = 0x0000_0080;
746
747pub const IMAGE_SCN_LNK_OTHER: u32 = 0x0000_0100;
749pub const IMAGE_SCN_LNK_INFO: u32 = 0x0000_0200;
751pub const IMAGE_SCN_LNK_REMOVE: u32 = 0x0000_0800;
754pub const IMAGE_SCN_LNK_COMDAT: u32 = 0x0000_1000;
756pub const IMAGE_SCN_NO_DEFER_SPEC_EXC: u32 = 0x0000_4000;
760pub const IMAGE_SCN_GPREL: u32 = 0x0000_8000;
762pub const IMAGE_SCN_MEM_FARDATA: u32 = 0x0000_8000;
763pub const IMAGE_SCN_MEM_PURGEABLE: u32 = 0x0002_0000;
765pub const IMAGE_SCN_MEM_16BIT: u32 = 0x0002_0000;
766pub const IMAGE_SCN_MEM_LOCKED: u32 = 0x0004_0000;
767pub const IMAGE_SCN_MEM_PRELOAD: u32 = 0x0008_0000;
768
769pub const IMAGE_SCN_ALIGN_1BYTES: u32 = 0x0010_0000;
770pub const IMAGE_SCN_ALIGN_2BYTES: u32 = 0x0020_0000;
771pub const IMAGE_SCN_ALIGN_4BYTES: u32 = 0x0030_0000;
772pub const IMAGE_SCN_ALIGN_8BYTES: u32 = 0x0040_0000;
773pub const IMAGE_SCN_ALIGN_16BYTES: u32 = 0x0050_0000;
775pub const IMAGE_SCN_ALIGN_32BYTES: u32 = 0x0060_0000;
776pub const IMAGE_SCN_ALIGN_64BYTES: u32 = 0x0070_0000;
777pub const IMAGE_SCN_ALIGN_128BYTES: u32 = 0x0080_0000;
778pub const IMAGE_SCN_ALIGN_256BYTES: u32 = 0x0090_0000;
779pub const IMAGE_SCN_ALIGN_512BYTES: u32 = 0x00A0_0000;
780pub const IMAGE_SCN_ALIGN_1024BYTES: u32 = 0x00B0_0000;
781pub const IMAGE_SCN_ALIGN_2048BYTES: u32 = 0x00C0_0000;
782pub const IMAGE_SCN_ALIGN_4096BYTES: u32 = 0x00D0_0000;
783pub const IMAGE_SCN_ALIGN_8192BYTES: u32 = 0x00E0_0000;
784pub const IMAGE_SCN_ALIGN_MASK: u32 = 0x00F0_0000;
786
787pub const IMAGE_SCN_LNK_NRELOC_OVFL: u32 = 0x0100_0000;
789pub const IMAGE_SCN_MEM_DISCARDABLE: u32 = 0x0200_0000;
791pub const IMAGE_SCN_MEM_NOT_CACHED: u32 = 0x0400_0000;
793pub const IMAGE_SCN_MEM_NOT_PAGED: u32 = 0x0800_0000;
795pub const IMAGE_SCN_MEM_SHARED: u32 = 0x1000_0000;
797pub const IMAGE_SCN_MEM_EXECUTE: u32 = 0x2000_0000;
799pub const IMAGE_SCN_MEM_READ: u32 = 0x4000_0000;
801pub const IMAGE_SCN_MEM_WRITE: u32 = 0x8000_0000;
803
804pub const IMAGE_SCN_SCALE_INDEX: u32 = 0x0000_0001;
809
810#[derive(Debug, Clone, Copy)]
815#[repr(C)]
816pub struct ImageSymbol {
817 pub name: [u8; 8],
819 pub value: U32<LE>,
820 pub section_number: U16<LE>,
821 pub typ: U16<LE>,
822 pub storage_class: u8,
823 pub number_of_aux_symbols: u8,
824}
825
826pub const IMAGE_SIZEOF_SYMBOL: usize = 18;
827
828#[derive(Debug, Clone, Copy)]
829#[repr(C)]
830pub struct ImageSymbolBytes(pub [u8; IMAGE_SIZEOF_SYMBOL]);
831
832#[derive(Debug, Clone, Copy)]
833#[repr(C)]
834pub struct ImageSymbolEx {
835 pub name: [u8; 8],
837 pub value: U32<LE>,
838 pub section_number: I32<LE>,
839 pub typ: U16<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)]
952#[repr(C)]
953pub struct ImageAuxSymbolTokenDef {
954 pub aux_type: u8,
956 pub reserved1: u8,
958 pub symbol_table_index: U32<LE>,
959 pub reserved2: [u8; 12],
961}
962
963pub const IMAGE_AUX_SYMBOL_TYPE_TOKEN_DEF: u16 = 1;
964
965#[derive(Debug, Clone, Copy)]
967#[repr(C)]
968pub struct ImageAuxSymbolFunction {
969 pub tag_index: U32<LE>,
970 pub total_size: U32<LE>,
971 pub pointer_to_linenumber: U32<LE>,
972 pub pointer_to_next_function: U32<LE>,
973 pub unused: [u8; 2],
974}
975
976#[derive(Debug, Clone, Copy)]
979#[repr(C)]
980pub struct ImageAuxSymbolFunctionBeginEnd {
981 pub unused1: [u8; 4],
982 pub linenumber: U16<LE>,
984 pub unused2: [u8; 6],
985 pub pointer_to_next_function: U32<LE>,
986 pub unused3: [u8; 2],
987}
988
989#[derive(Debug, Clone, Copy)]
994#[repr(C)]
995pub struct ImageAuxSymbolWeak {
996 pub weak_default_sym_index: U32<LE>,
998 pub weak_search_type: U32<LE>,
999}
1000
1001#[derive(Debug, Clone, Copy)]
1006#[repr(C)]
1007pub struct ImageAuxSymbolSection {
1008 pub length: U32<LE>,
1010 pub number_of_relocations: U16<LE>,
1012 pub number_of_linenumbers: U16<LE>,
1014 pub check_sum: U32<LE>,
1016 pub number: U16<LE>,
1018 pub selection: u8,
1020 pub reserved: u8,
1021 pub high_number: U16<LE>,
1023}
1024
1025#[derive(Debug, Clone, Copy)]
1028#[repr(C)]
1029pub struct ImageAuxSymbolCrc {
1030 pub crc: U32<LE>,
1031}
1032
1033pub const IMAGE_COMDAT_SELECT_NODUPLICATES: u8 = 1;
1038pub const IMAGE_COMDAT_SELECT_ANY: u8 = 2;
1039pub const IMAGE_COMDAT_SELECT_SAME_SIZE: u8 = 3;
1040pub const IMAGE_COMDAT_SELECT_EXACT_MATCH: u8 = 4;
1041pub const IMAGE_COMDAT_SELECT_ASSOCIATIVE: u8 = 5;
1042pub const IMAGE_COMDAT_SELECT_LARGEST: u8 = 6;
1043pub const IMAGE_COMDAT_SELECT_NEWEST: u8 = 7;
1044
1045pub const IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY: u32 = 1;
1046pub const IMAGE_WEAK_EXTERN_SEARCH_LIBRARY: u32 = 2;
1047pub const IMAGE_WEAK_EXTERN_SEARCH_ALIAS: u32 = 3;
1048pub const IMAGE_WEAK_EXTERN_ANTI_DEPENDENCY: u32 = 4;
1049
1050#[derive(Debug, Clone, Copy)]
1056#[repr(C)]
1057pub struct ImageRelocation {
1058 pub virtual_address: U32<LE>,
1060 pub symbol_table_index: U32<LE>,
1061 pub typ: U16<LE>,
1062}
1063
1064pub const IMAGE_REL_I386_ABSOLUTE: u16 = 0x0000;
1069pub const IMAGE_REL_I386_DIR16: u16 = 0x0001;
1071pub const IMAGE_REL_I386_REL16: u16 = 0x0002;
1073pub const IMAGE_REL_I386_DIR32: u16 = 0x0006;
1075pub const IMAGE_REL_I386_DIR32NB: u16 = 0x0007;
1077pub const IMAGE_REL_I386_SEG12: u16 = 0x0009;
1079pub const IMAGE_REL_I386_SECTION: u16 = 0x000A;
1080pub const IMAGE_REL_I386_SECREL: u16 = 0x000B;
1081pub const IMAGE_REL_I386_TOKEN: u16 = 0x000C;
1083pub const IMAGE_REL_I386_SECREL7: u16 = 0x000D;
1085pub const IMAGE_REL_I386_REL32: u16 = 0x0014;
1087
1088pub const IMAGE_REL_MIPS_ABSOLUTE: u16 = 0x0000;
1093pub const IMAGE_REL_MIPS_REFHALF: u16 = 0x0001;
1094pub const IMAGE_REL_MIPS_REFWORD: u16 = 0x0002;
1095pub const IMAGE_REL_MIPS_JMPADDR: u16 = 0x0003;
1096pub const IMAGE_REL_MIPS_REFHI: u16 = 0x0004;
1097pub const IMAGE_REL_MIPS_REFLO: u16 = 0x0005;
1098pub const IMAGE_REL_MIPS_GPREL: u16 = 0x0006;
1099pub const IMAGE_REL_MIPS_LITERAL: u16 = 0x0007;
1100pub const IMAGE_REL_MIPS_SECTION: u16 = 0x000A;
1101pub const IMAGE_REL_MIPS_SECREL: u16 = 0x000B;
1102pub const IMAGE_REL_MIPS_SECRELLO: u16 = 0x000C;
1104pub const IMAGE_REL_MIPS_SECRELHI: u16 = 0x000D;
1106pub const IMAGE_REL_MIPS_TOKEN: u16 = 0x000E;
1108pub const IMAGE_REL_MIPS_JMPADDR16: u16 = 0x0010;
1109pub const IMAGE_REL_MIPS_REFWORDNB: u16 = 0x0022;
1110pub const IMAGE_REL_MIPS_PAIR: u16 = 0x0025;
1111
1112pub const IMAGE_REL_ALPHA_ABSOLUTE: u16 = 0x0000;
1116pub const IMAGE_REL_ALPHA_REFLONG: u16 = 0x0001;
1117pub const IMAGE_REL_ALPHA_REFQUAD: u16 = 0x0002;
1118pub const IMAGE_REL_ALPHA_GPREL32: u16 = 0x0003;
1119pub const IMAGE_REL_ALPHA_LITERAL: u16 = 0x0004;
1120pub const IMAGE_REL_ALPHA_LITUSE: u16 = 0x0005;
1121pub const IMAGE_REL_ALPHA_GPDISP: u16 = 0x0006;
1122pub const IMAGE_REL_ALPHA_BRADDR: u16 = 0x0007;
1123pub const IMAGE_REL_ALPHA_HINT: u16 = 0x0008;
1124pub const IMAGE_REL_ALPHA_INLINE_REFLONG: u16 = 0x0009;
1125pub const IMAGE_REL_ALPHA_REFHI: u16 = 0x000A;
1126pub const IMAGE_REL_ALPHA_REFLO: u16 = 0x000B;
1127pub const IMAGE_REL_ALPHA_PAIR: u16 = 0x000C;
1128pub const IMAGE_REL_ALPHA_MATCH: u16 = 0x000D;
1129pub const IMAGE_REL_ALPHA_SECTION: u16 = 0x000E;
1130pub const IMAGE_REL_ALPHA_SECREL: u16 = 0x000F;
1131pub const IMAGE_REL_ALPHA_REFLONGNB: u16 = 0x0010;
1132pub const IMAGE_REL_ALPHA_SECRELLO: u16 = 0x0011;
1134pub const IMAGE_REL_ALPHA_SECRELHI: u16 = 0x0012;
1136pub const IMAGE_REL_ALPHA_REFQ3: u16 = 0x0013;
1138pub const IMAGE_REL_ALPHA_REFQ2: u16 = 0x0014;
1140pub const IMAGE_REL_ALPHA_REFQ1: u16 = 0x0015;
1142pub const IMAGE_REL_ALPHA_GPRELLO: u16 = 0x0016;
1144pub const IMAGE_REL_ALPHA_GPRELHI: u16 = 0x0017;
1146
1147pub const IMAGE_REL_PPC_ABSOLUTE: u16 = 0x0000;
1152pub const IMAGE_REL_PPC_ADDR64: u16 = 0x0001;
1154pub const IMAGE_REL_PPC_ADDR32: u16 = 0x0002;
1156pub const IMAGE_REL_PPC_ADDR24: u16 = 0x0003;
1158pub const IMAGE_REL_PPC_ADDR16: u16 = 0x0004;
1160pub const IMAGE_REL_PPC_ADDR14: u16 = 0x0005;
1162pub const IMAGE_REL_PPC_REL24: u16 = 0x0006;
1164pub const IMAGE_REL_PPC_REL14: u16 = 0x0007;
1166pub const IMAGE_REL_PPC_TOCREL16: u16 = 0x0008;
1168pub const IMAGE_REL_PPC_TOCREL14: u16 = 0x0009;
1170
1171pub const IMAGE_REL_PPC_ADDR32NB: u16 = 0x000A;
1173pub const IMAGE_REL_PPC_SECREL: u16 = 0x000B;
1175pub const IMAGE_REL_PPC_SECTION: u16 = 0x000C;
1177pub const IMAGE_REL_PPC_IFGLUE: u16 = 0x000D;
1179pub const IMAGE_REL_PPC_IMGLUE: u16 = 0x000E;
1181pub const IMAGE_REL_PPC_SECREL16: u16 = 0x000F;
1183pub const IMAGE_REL_PPC_REFHI: u16 = 0x0010;
1184pub const IMAGE_REL_PPC_REFLO: u16 = 0x0011;
1185pub const IMAGE_REL_PPC_PAIR: u16 = 0x0012;
1186pub const IMAGE_REL_PPC_SECRELLO: u16 = 0x0013;
1188pub const IMAGE_REL_PPC_SECRELHI: u16 = 0x0014;
1190pub const IMAGE_REL_PPC_GPREL: u16 = 0x0015;
1191pub const IMAGE_REL_PPC_TOKEN: u16 = 0x0016;
1193
1194pub const IMAGE_REL_PPC_TYPEMASK: u16 = 0x00FF;
1196
1197pub const IMAGE_REL_PPC_NEG: u16 = 0x0100;
1201pub const IMAGE_REL_PPC_BRTAKEN: u16 = 0x0200;
1203pub const IMAGE_REL_PPC_BRNTAKEN: u16 = 0x0400;
1205pub const IMAGE_REL_PPC_TOCDEFN: u16 = 0x0800;
1207
1208pub const IMAGE_REL_SH3_ABSOLUTE: u16 = 0x0000;
1213pub const IMAGE_REL_SH3_DIRECT16: u16 = 0x0001;
1215pub const IMAGE_REL_SH3_DIRECT32: u16 = 0x0002;
1217pub const IMAGE_REL_SH3_DIRECT8: u16 = 0x0003;
1219pub const IMAGE_REL_SH3_DIRECT8_WORD: u16 = 0x0004;
1221pub const IMAGE_REL_SH3_DIRECT8_LONG: u16 = 0x0005;
1223pub const IMAGE_REL_SH3_DIRECT4: u16 = 0x0006;
1225pub const IMAGE_REL_SH3_DIRECT4_WORD: u16 = 0x0007;
1227pub const IMAGE_REL_SH3_DIRECT4_LONG: u16 = 0x0008;
1229pub const IMAGE_REL_SH3_PCREL8_WORD: u16 = 0x0009;
1231pub const IMAGE_REL_SH3_PCREL8_LONG: u16 = 0x000A;
1233pub const IMAGE_REL_SH3_PCREL12_WORD: u16 = 0x000B;
1235pub const IMAGE_REL_SH3_STARTOF_SECTION: u16 = 0x000C;
1237pub const IMAGE_REL_SH3_SIZEOF_SECTION: u16 = 0x000D;
1239pub const IMAGE_REL_SH3_SECTION: u16 = 0x000E;
1241pub const IMAGE_REL_SH3_SECREL: u16 = 0x000F;
1243pub const IMAGE_REL_SH3_DIRECT32_NB: u16 = 0x0010;
1245pub const IMAGE_REL_SH3_GPREL4_LONG: u16 = 0x0011;
1247pub const IMAGE_REL_SH3_TOKEN: u16 = 0x0012;
1249pub const IMAGE_REL_SHM_PCRELPT: u16 = 0x0013;
1252pub const IMAGE_REL_SHM_REFLO: u16 = 0x0014;
1254pub const IMAGE_REL_SHM_REFHALF: u16 = 0x0015;
1256pub const IMAGE_REL_SHM_RELLO: u16 = 0x0016;
1258pub const IMAGE_REL_SHM_RELHALF: u16 = 0x0017;
1260pub const IMAGE_REL_SHM_PAIR: u16 = 0x0018;
1262
1263pub const IMAGE_REL_SH_NOMODE: u16 = 0x8000;
1265
1266pub const IMAGE_REL_ARM_ABSOLUTE: u16 = 0x0000;
1268pub const IMAGE_REL_ARM_ADDR32: u16 = 0x0001;
1270pub const IMAGE_REL_ARM_ADDR32NB: u16 = 0x0002;
1272pub const IMAGE_REL_ARM_BRANCH24: u16 = 0x0003;
1274pub const IMAGE_REL_ARM_BRANCH11: u16 = 0x0004;
1276pub const IMAGE_REL_ARM_TOKEN: u16 = 0x0005;
1278pub const IMAGE_REL_ARM_GPREL12: u16 = 0x0006;
1280pub const IMAGE_REL_ARM_GPREL7: u16 = 0x0007;
1282pub const IMAGE_REL_ARM_BLX24: u16 = 0x0008;
1283pub const IMAGE_REL_ARM_BLX11: u16 = 0x0009;
1284pub const IMAGE_REL_ARM_REL32: u16 = 0x000A;
1286pub const IMAGE_REL_ARM_SECTION: u16 = 0x000E;
1288pub const IMAGE_REL_ARM_SECREL: u16 = 0x000F;
1290pub const IMAGE_REL_ARM_MOV32A: u16 = 0x0010;
1292pub const IMAGE_REL_ARM_MOV32: u16 = 0x0010;
1294pub const IMAGE_REL_ARM_MOV32T: u16 = 0x0011;
1296pub const IMAGE_REL_THUMB_MOV32: u16 = 0x0011;
1298pub const IMAGE_REL_ARM_BRANCH20T: u16 = 0x0012;
1300pub const IMAGE_REL_THUMB_BRANCH20: u16 = 0x0012;
1302pub const IMAGE_REL_ARM_BRANCH24T: u16 = 0x0014;
1304pub const IMAGE_REL_THUMB_BRANCH24: u16 = 0x0014;
1306pub const IMAGE_REL_ARM_BLX23T: u16 = 0x0015;
1308pub const IMAGE_REL_THUMB_BLX23: u16 = 0x0015;
1310
1311pub const IMAGE_REL_AM_ABSOLUTE: u16 = 0x0000;
1312pub const IMAGE_REL_AM_ADDR32: u16 = 0x0001;
1313pub const IMAGE_REL_AM_ADDR32NB: u16 = 0x0002;
1314pub const IMAGE_REL_AM_CALL32: u16 = 0x0003;
1315pub const IMAGE_REL_AM_FUNCINFO: u16 = 0x0004;
1316pub const IMAGE_REL_AM_REL32_1: u16 = 0x0005;
1317pub const IMAGE_REL_AM_REL32_2: u16 = 0x0006;
1318pub const IMAGE_REL_AM_SECREL: u16 = 0x0007;
1319pub const IMAGE_REL_AM_SECTION: u16 = 0x0008;
1320pub const IMAGE_REL_AM_TOKEN: u16 = 0x0009;
1321
1322pub const IMAGE_REL_ARM64_ABSOLUTE: u16 = 0x0000;
1328pub const IMAGE_REL_ARM64_ADDR32: u16 = 0x0001;
1330pub const IMAGE_REL_ARM64_ADDR32NB: u16 = 0x0002;
1332pub const IMAGE_REL_ARM64_BRANCH26: u16 = 0x0003;
1334pub const IMAGE_REL_ARM64_PAGEBASE_REL21: u16 = 0x0004;
1336pub const IMAGE_REL_ARM64_REL21: u16 = 0x0005;
1338pub const IMAGE_REL_ARM64_PAGEOFFSET_12A: u16 = 0x0006;
1340pub const IMAGE_REL_ARM64_PAGEOFFSET_12L: u16 = 0x0007;
1342pub const IMAGE_REL_ARM64_SECREL: u16 = 0x0008;
1344pub const IMAGE_REL_ARM64_SECREL_LOW12A: u16 = 0x0009;
1346pub const IMAGE_REL_ARM64_SECREL_HIGH12A: u16 = 0x000A;
1348pub const IMAGE_REL_ARM64_SECREL_LOW12L: u16 = 0x000B;
1350pub const IMAGE_REL_ARM64_TOKEN: u16 = 0x000C;
1351pub const IMAGE_REL_ARM64_SECTION: u16 = 0x000D;
1353pub const IMAGE_REL_ARM64_ADDR64: u16 = 0x000E;
1355pub const IMAGE_REL_ARM64_BRANCH19: u16 = 0x000F;
1357pub const IMAGE_REL_ARM64_BRANCH14: u16 = 0x0010;
1359pub const IMAGE_REL_ARM64_REL32: u16 = 0x0011;
1361
1362pub const IMAGE_REL_AMD64_ABSOLUTE: u16 = 0x0000;
1367pub const IMAGE_REL_AMD64_ADDR64: u16 = 0x0001;
1369pub const IMAGE_REL_AMD64_ADDR32: u16 = 0x0002;
1371pub const IMAGE_REL_AMD64_ADDR32NB: u16 = 0x0003;
1373pub const IMAGE_REL_AMD64_REL32: u16 = 0x0004;
1375pub const IMAGE_REL_AMD64_REL32_1: u16 = 0x0005;
1377pub const IMAGE_REL_AMD64_REL32_2: u16 = 0x0006;
1379pub const IMAGE_REL_AMD64_REL32_3: u16 = 0x0007;
1381pub const IMAGE_REL_AMD64_REL32_4: u16 = 0x0008;
1383pub const IMAGE_REL_AMD64_REL32_5: u16 = 0x0009;
1385pub const IMAGE_REL_AMD64_SECTION: u16 = 0x000A;
1387pub const IMAGE_REL_AMD64_SECREL: u16 = 0x000B;
1389pub const IMAGE_REL_AMD64_SECREL7: u16 = 0x000C;
1391pub const IMAGE_REL_AMD64_TOKEN: u16 = 0x000D;
1393pub const IMAGE_REL_AMD64_SREL32: u16 = 0x000E;
1395pub const IMAGE_REL_AMD64_PAIR: u16 = 0x000F;
1396pub const IMAGE_REL_AMD64_SSPAN32: u16 = 0x0010;
1398pub const IMAGE_REL_AMD64_EHANDLER: u16 = 0x0011;
1399pub const IMAGE_REL_AMD64_IMPORT_BR: u16 = 0x0012;
1401pub const IMAGE_REL_AMD64_IMPORT_CALL: u16 = 0x0013;
1403pub const IMAGE_REL_AMD64_CFG_BR: u16 = 0x0014;
1405pub const IMAGE_REL_AMD64_CFG_BR_REX: u16 = 0x0015;
1407pub const IMAGE_REL_AMD64_CFG_CALL: u16 = 0x0016;
1409pub const IMAGE_REL_AMD64_INDIR_BR: u16 = 0x0017;
1411pub const IMAGE_REL_AMD64_INDIR_BR_REX: u16 = 0x0018;
1413pub const IMAGE_REL_AMD64_INDIR_CALL: u16 = 0x0019;
1415pub const IMAGE_REL_AMD64_INDIR_BR_SWITCHTABLE_FIRST: u16 = 0x0020;
1417pub const IMAGE_REL_AMD64_INDIR_BR_SWITCHTABLE_LAST: u16 = 0x002F;
1419
1420pub const IMAGE_REL_IA64_ABSOLUTE: u16 = 0x0000;
1424pub const IMAGE_REL_IA64_IMM14: u16 = 0x0001;
1425pub const IMAGE_REL_IA64_IMM22: u16 = 0x0002;
1426pub const IMAGE_REL_IA64_IMM64: u16 = 0x0003;
1427pub const IMAGE_REL_IA64_DIR32: u16 = 0x0004;
1428pub const IMAGE_REL_IA64_DIR64: u16 = 0x0005;
1429pub const IMAGE_REL_IA64_PCREL21B: u16 = 0x0006;
1430pub const IMAGE_REL_IA64_PCREL21M: u16 = 0x0007;
1431pub const IMAGE_REL_IA64_PCREL21F: u16 = 0x0008;
1432pub const IMAGE_REL_IA64_GPREL22: u16 = 0x0009;
1433pub const IMAGE_REL_IA64_LTOFF22: u16 = 0x000A;
1434pub const IMAGE_REL_IA64_SECTION: u16 = 0x000B;
1435pub const IMAGE_REL_IA64_SECREL22: u16 = 0x000C;
1436pub const IMAGE_REL_IA64_SECREL64I: u16 = 0x000D;
1437pub const IMAGE_REL_IA64_SECREL32: u16 = 0x000E;
1438pub const IMAGE_REL_IA64_DIR32NB: u16 = 0x0010;
1440pub const IMAGE_REL_IA64_SREL14: u16 = 0x0011;
1441pub const IMAGE_REL_IA64_SREL22: u16 = 0x0012;
1442pub const IMAGE_REL_IA64_SREL32: u16 = 0x0013;
1443pub const IMAGE_REL_IA64_UREL32: u16 = 0x0014;
1444pub const IMAGE_REL_IA64_PCREL60X: u16 = 0x0015;
1446pub const IMAGE_REL_IA64_PCREL60B: u16 = 0x0016;
1448pub const IMAGE_REL_IA64_PCREL60F: u16 = 0x0017;
1450pub const IMAGE_REL_IA64_PCREL60I: u16 = 0x0018;
1452pub const IMAGE_REL_IA64_PCREL60M: u16 = 0x0019;
1454pub const IMAGE_REL_IA64_IMMGPREL64: u16 = 0x001A;
1455pub const IMAGE_REL_IA64_TOKEN: u16 = 0x001B;
1457pub const IMAGE_REL_IA64_GPREL32: u16 = 0x001C;
1458pub const IMAGE_REL_IA64_ADDEND: u16 = 0x001F;
1459
1460pub const IMAGE_REL_CEF_ABSOLUTE: u16 = 0x0000;
1465pub const IMAGE_REL_CEF_ADDR32: u16 = 0x0001;
1467pub const IMAGE_REL_CEF_ADDR64: u16 = 0x0002;
1469pub const IMAGE_REL_CEF_ADDR32NB: u16 = 0x0003;
1471pub const IMAGE_REL_CEF_SECTION: u16 = 0x0004;
1473pub const IMAGE_REL_CEF_SECREL: u16 = 0x0005;
1475pub const IMAGE_REL_CEF_TOKEN: u16 = 0x0006;
1477
1478pub const IMAGE_REL_CEE_ABSOLUTE: u16 = 0x0000;
1483pub const IMAGE_REL_CEE_ADDR32: u16 = 0x0001;
1485pub const IMAGE_REL_CEE_ADDR64: u16 = 0x0002;
1487pub const IMAGE_REL_CEE_ADDR32NB: u16 = 0x0003;
1489pub const IMAGE_REL_CEE_SECTION: u16 = 0x0004;
1491pub const IMAGE_REL_CEE_SECREL: u16 = 0x0005;
1493pub const IMAGE_REL_CEE_TOKEN: u16 = 0x0006;
1495
1496pub const IMAGE_REL_M32R_ABSOLUTE: u16 = 0x0000;
1498pub const IMAGE_REL_M32R_ADDR32: u16 = 0x0001;
1500pub const IMAGE_REL_M32R_ADDR32NB: u16 = 0x0002;
1502pub const IMAGE_REL_M32R_ADDR24: u16 = 0x0003;
1504pub const IMAGE_REL_M32R_GPREL16: u16 = 0x0004;
1506pub const IMAGE_REL_M32R_PCREL24: u16 = 0x0005;
1508pub const IMAGE_REL_M32R_PCREL16: u16 = 0x0006;
1510pub const IMAGE_REL_M32R_PCREL8: u16 = 0x0007;
1512pub const IMAGE_REL_M32R_REFHALF: u16 = 0x0008;
1514pub const IMAGE_REL_M32R_REFHI: u16 = 0x0009;
1516pub const IMAGE_REL_M32R_REFLO: u16 = 0x000A;
1518pub const IMAGE_REL_M32R_PAIR: u16 = 0x000B;
1520pub const IMAGE_REL_M32R_SECTION: u16 = 0x000C;
1522pub const IMAGE_REL_M32R_SECREL32: u16 = 0x000D;
1524pub const IMAGE_REL_M32R_TOKEN: u16 = 0x000E;
1526
1527pub const IMAGE_REL_EBC_ABSOLUTE: u16 = 0x0000;
1529pub const IMAGE_REL_EBC_ADDR32NB: u16 = 0x0001;
1531pub const IMAGE_REL_EBC_REL32: u16 = 0x0002;
1533pub const IMAGE_REL_EBC_SECTION: u16 = 0x0003;
1535pub const IMAGE_REL_EBC_SECREL: u16 = 0x0004;
1537
1538pub const EMARCH_ENC_I17_IMM7B_INST_WORD_X: u16 = 3;
1550pub const EMARCH_ENC_I17_IMM7B_SIZE_X: u16 = 7;
1552pub const EMARCH_ENC_I17_IMM7B_INST_WORD_POS_X: u16 = 4;
1554pub const EMARCH_ENC_I17_IMM7B_VAL_POS_X: u16 = 0;
1556
1557pub const EMARCH_ENC_I17_IMM9D_INST_WORD_X: u16 = 3;
1559pub const EMARCH_ENC_I17_IMM9D_SIZE_X: u16 = 9;
1561pub const EMARCH_ENC_I17_IMM9D_INST_WORD_POS_X: u16 = 18;
1563pub const EMARCH_ENC_I17_IMM9D_VAL_POS_X: u16 = 7;
1565
1566pub const EMARCH_ENC_I17_IMM5C_INST_WORD_X: u16 = 3;
1568pub const EMARCH_ENC_I17_IMM5C_SIZE_X: u16 = 5;
1570pub const EMARCH_ENC_I17_IMM5C_INST_WORD_POS_X: u16 = 13;
1572pub const EMARCH_ENC_I17_IMM5C_VAL_POS_X: u16 = 16;
1574
1575pub const EMARCH_ENC_I17_IC_INST_WORD_X: u16 = 3;
1577pub const EMARCH_ENC_I17_IC_SIZE_X: u16 = 1;
1579pub const EMARCH_ENC_I17_IC_INST_WORD_POS_X: u16 = 12;
1581pub const EMARCH_ENC_I17_IC_VAL_POS_X: u16 = 21;
1583
1584pub const EMARCH_ENC_I17_IMM41A_INST_WORD_X: u16 = 1;
1586pub const EMARCH_ENC_I17_IMM41A_SIZE_X: u16 = 10;
1588pub const EMARCH_ENC_I17_IMM41A_INST_WORD_POS_X: u16 = 14;
1590pub const EMARCH_ENC_I17_IMM41A_VAL_POS_X: u16 = 22;
1592
1593pub const EMARCH_ENC_I17_IMM41B_INST_WORD_X: u16 = 1;
1595pub const EMARCH_ENC_I17_IMM41B_SIZE_X: u16 = 8;
1597pub const EMARCH_ENC_I17_IMM41B_INST_WORD_POS_X: u16 = 24;
1599pub const EMARCH_ENC_I17_IMM41B_VAL_POS_X: u16 = 32;
1601
1602pub const EMARCH_ENC_I17_IMM41C_INST_WORD_X: u16 = 2;
1604pub const EMARCH_ENC_I17_IMM41C_SIZE_X: u16 = 23;
1606pub const EMARCH_ENC_I17_IMM41C_INST_WORD_POS_X: u16 = 0;
1608pub const EMARCH_ENC_I17_IMM41C_VAL_POS_X: u16 = 40;
1610
1611pub const EMARCH_ENC_I17_SIGN_INST_WORD_X: u16 = 3;
1613pub const EMARCH_ENC_I17_SIGN_SIZE_X: u16 = 1;
1615pub const EMARCH_ENC_I17_SIGN_INST_WORD_POS_X: u16 = 27;
1617pub const EMARCH_ENC_I17_SIGN_VAL_POS_X: u16 = 63;
1619
1620pub const X3_OPCODE_INST_WORD_X: u16 = 3;
1622pub const X3_OPCODE_SIZE_X: u16 = 4;
1624pub const X3_OPCODE_INST_WORD_POS_X: u16 = 28;
1626pub const X3_OPCODE_SIGN_VAL_POS_X: u16 = 0;
1628
1629pub const X3_I_INST_WORD_X: u16 = 3;
1631pub const X3_I_SIZE_X: u16 = 1;
1633pub const X3_I_INST_WORD_POS_X: u16 = 27;
1635pub const X3_I_SIGN_VAL_POS_X: u16 = 59;
1637
1638pub const X3_D_WH_INST_WORD_X: u16 = 3;
1640pub const X3_D_WH_SIZE_X: u16 = 3;
1642pub const X3_D_WH_INST_WORD_POS_X: u16 = 24;
1644pub const X3_D_WH_SIGN_VAL_POS_X: u16 = 0;
1646
1647pub const X3_IMM20_INST_WORD_X: u16 = 3;
1649pub const X3_IMM20_SIZE_X: u16 = 20;
1651pub const X3_IMM20_INST_WORD_POS_X: u16 = 4;
1653pub const X3_IMM20_SIGN_VAL_POS_X: u16 = 0;
1655
1656pub const X3_IMM39_1_INST_WORD_X: u16 = 2;
1658pub const X3_IMM39_1_SIZE_X: u16 = 23;
1660pub const X3_IMM39_1_INST_WORD_POS_X: u16 = 0;
1662pub const X3_IMM39_1_SIGN_VAL_POS_X: u16 = 36;
1664
1665pub const X3_IMM39_2_INST_WORD_X: u16 = 1;
1667pub const X3_IMM39_2_SIZE_X: u16 = 16;
1669pub const X3_IMM39_2_INST_WORD_POS_X: u16 = 16;
1671pub const X3_IMM39_2_SIGN_VAL_POS_X: u16 = 20;
1673
1674pub const X3_P_INST_WORD_X: u16 = 3;
1676pub const X3_P_SIZE_X: u16 = 4;
1678pub const X3_P_INST_WORD_POS_X: u16 = 0;
1680pub const X3_P_SIGN_VAL_POS_X: u16 = 0;
1682
1683pub const X3_TMPLT_INST_WORD_X: u16 = 0;
1685pub const X3_TMPLT_SIZE_X: u16 = 4;
1687pub const X3_TMPLT_INST_WORD_POS_X: u16 = 0;
1689pub const X3_TMPLT_SIGN_VAL_POS_X: u16 = 0;
1691
1692pub const X3_BTYPE_QP_INST_WORD_X: u16 = 2;
1694pub const X3_BTYPE_QP_SIZE_X: u16 = 9;
1696pub const X3_BTYPE_QP_INST_WORD_POS_X: u16 = 23;
1698pub const X3_BTYPE_QP_INST_VAL_POS_X: u16 = 0;
1700
1701pub const X3_EMPTY_INST_WORD_X: u16 = 1;
1703pub const X3_EMPTY_SIZE_X: u16 = 2;
1705pub const X3_EMPTY_INST_WORD_POS_X: u16 = 14;
1707pub const X3_EMPTY_INST_VAL_POS_X: u16 = 0;
1709
1710#[derive(Debug, Clone, Copy)]
1716#[repr(C)]
1717pub struct ImageLinenumber {
1718 pub symbol_table_index_or_virtual_address: U32<LE>,
1721 pub linenumber: U16<LE>,
1723}
1724
1725#[derive(Debug, Clone, Copy)]
1730#[repr(C)]
1731pub struct ImageBaseRelocation {
1732 pub virtual_address: U32<LE>,
1733 pub size_of_block: U32<LE>,
1734 }
1736
1737pub const IMAGE_REL_BASED_ABSOLUTE: u16 = 0;
1742pub const IMAGE_REL_BASED_HIGH: u16 = 1;
1743pub const IMAGE_REL_BASED_LOW: u16 = 2;
1744pub const IMAGE_REL_BASED_HIGHLOW: u16 = 3;
1745pub const IMAGE_REL_BASED_HIGHADJ: u16 = 4;
1746pub const IMAGE_REL_BASED_MACHINE_SPECIFIC_5: u16 = 5;
1747pub const IMAGE_REL_BASED_RESERVED: u16 = 6;
1748pub const IMAGE_REL_BASED_MACHINE_SPECIFIC_7: u16 = 7;
1749pub const IMAGE_REL_BASED_MACHINE_SPECIFIC_8: u16 = 8;
1750pub const IMAGE_REL_BASED_MACHINE_SPECIFIC_9: u16 = 9;
1751pub const IMAGE_REL_BASED_DIR64: u16 = 10;
1752
1753pub const IMAGE_REL_BASED_IA64_IMM64: u16 = 9;
1758
1759pub const IMAGE_REL_BASED_MIPS_JMPADDR: u16 = 5;
1760pub const IMAGE_REL_BASED_MIPS_JMPADDR16: u16 = 9;
1761
1762pub const IMAGE_REL_BASED_ARM_MOV32: u16 = 5;
1763pub const IMAGE_REL_BASED_THUMB_MOV32: u16 = 7;
1764
1765pub const IMAGE_REL_BASED_RISCV_HIGH20: u16 = 5;
1766pub const IMAGE_REL_BASED_RISCV_LOW12I: u16 = 7;
1767pub const IMAGE_REL_BASED_RISCV_LOW12S: u16 = 8;
1768
1769pub const IMAGE_ARCHIVE_START_SIZE: usize = 8;
1774pub const IMAGE_ARCHIVE_START: &[u8; 8] = b"!<arch>\n";
1775pub const IMAGE_ARCHIVE_END: &[u8] = b"`\n";
1776pub const IMAGE_ARCHIVE_PAD: &[u8] = b"\n";
1777pub const IMAGE_ARCHIVE_LINKER_MEMBER: &[u8; 16] = b"/ ";
1778pub const IMAGE_ARCHIVE_LONGNAMES_MEMBER: &[u8; 16] = b"// ";
1779pub const IMAGE_ARCHIVE_HYBRIDMAP_MEMBER: &[u8; 16] = b"/<HYBRIDMAP>/ ";
1780
1781#[derive(Debug, Clone, Copy)]
1782#[repr(C)]
1783pub struct ImageArchiveMemberHeader {
1784 pub name: [u8; 16],
1786 pub date: [u8; 12],
1788 pub user_id: [u8; 6],
1790 pub group_id: [u8; 6],
1792 pub mode: [u8; 8],
1794 pub size: [u8; 10],
1796 pub end_header: [u8; 2],
1798}
1799
1800pub const IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR: u16 = 60;
1801
1802#[derive(Debug, Clone, Copy)]
1811#[repr(C)]
1812pub struct ImageExportDirectory {
1813 pub characteristics: U32<LE>,
1814 pub time_date_stamp: U32<LE>,
1815 pub major_version: U16<LE>,
1816 pub minor_version: U16<LE>,
1817 pub name: U32<LE>,
1818 pub base: U32<LE>,
1819 pub number_of_functions: U32<LE>,
1820 pub number_of_names: U32<LE>,
1821 pub address_of_functions: U32<LE>,
1823 pub address_of_names: U32<LE>,
1825 pub address_of_name_ordinals: U32<LE>,
1827}
1828
1829#[derive(Debug, Clone, Copy)]
1834#[repr(C)]
1835pub struct ImageImportByName {
1836 pub hint: U16<LE>,
1837 }
1839
1840#[derive(Debug, Clone, Copy)]
1841#[repr(C)]
1842pub struct ImageThunkData64(pub U64<LE>);
1843#[derive(Debug, Clone, Copy)]
1856#[repr(C)]
1857pub struct ImageThunkData32(pub U32<LE>);
1858pub const IMAGE_ORDINAL_FLAG64: u64 = 0x8000000000000000;
1872pub const IMAGE_ORDINAL_FLAG32: u32 = 0x80000000;
1873
1874#[derive(Debug, Clone, Copy)]
1887#[repr(C)]
1888pub struct ImageTlsDirectory64 {
1889 pub start_address_of_raw_data: U64<LE>,
1890 pub end_address_of_raw_data: U64<LE>,
1891 pub address_of_index: U64<LE>,
1893 pub address_of_call_backs: U64<LE>,
1895 pub size_of_zero_fill: U32<LE>,
1896 pub characteristics: U32<LE>,
1897}
1898
1899#[derive(Debug, Clone, Copy)]
1900#[repr(C)]
1901pub struct ImageTlsDirectory32 {
1902 pub start_address_of_raw_data: U32<LE>,
1903 pub end_address_of_raw_data: U32<LE>,
1904 pub address_of_index: U32<LE>,
1906 pub address_of_call_backs: U32<LE>,
1908 pub size_of_zero_fill: U32<LE>,
1909 pub characteristics: U32<LE>,
1910}
1911
1912#[derive(Debug, Clone, Copy)]
1913#[repr(C)]
1914pub struct ImageImportDescriptor {
1915 pub original_first_thunk: U32<LE>,
1918 pub time_date_stamp: U32<LE>,
1923 pub forwarder_chain: U32<LE>,
1925 pub name: U32<LE>,
1926 pub first_thunk: U32<LE>,
1928}
1929
1930impl ImageImportDescriptor {
1931 pub fn is_null(&self) -> bool {
1934 self.original_first_thunk.get(LE) == 0
1935 && self.time_date_stamp.get(LE) == 0
1936 && self.forwarder_chain.get(LE) == 0
1937 && self.name.get(LE) == 0
1938 && self.first_thunk.get(LE) == 0
1939 }
1940}
1941
1942#[derive(Debug, Clone, Copy)]
1947#[repr(C)]
1948pub struct ImageBoundImportDescriptor {
1949 pub time_date_stamp: U32<LE>,
1950 pub offset_module_name: U16<LE>,
1951 pub number_of_module_forwarder_refs: U16<LE>,
1952 }
1954
1955#[derive(Debug, Clone, Copy)]
1956#[repr(C)]
1957pub struct ImageBoundForwarderRef {
1958 pub time_date_stamp: U32<LE>,
1959 pub offset_module_name: U16<LE>,
1960 pub reserved: U16<LE>,
1961}
1962
1963#[derive(Debug, Clone, Copy)]
1964#[repr(C)]
1965pub struct ImageDelayloadDescriptor {
1966 pub attributes: U32<LE>,
1967
1968 pub dll_name_rva: U32<LE>,
1970 pub module_handle_rva: U32<LE>,
1972 pub import_address_table_rva: U32<LE>,
1974 pub import_name_table_rva: U32<LE>,
1976 pub bound_import_address_table_rva: U32<LE>,
1978 pub unload_information_table_rva: U32<LE>,
1980 pub time_date_stamp: U32<LE>,
1982}
1983
1984impl ImageDelayloadDescriptor {
1985 pub fn is_null(&self) -> bool {
1988 self.attributes.get(LE) == 0
1989 && self.dll_name_rva.get(LE) == 0
1990 && self.module_handle_rva.get(LE) == 0
1991 && self.import_address_table_rva.get(LE) == 0
1992 && self.import_name_table_rva.get(LE) == 0
1993 && self.bound_import_address_table_rva.get(LE) == 0
1994 && self.unload_information_table_rva.get(LE) == 0
1995 && self.time_date_stamp.get(LE) == 0
1996 }
1997}
1998
1999pub const IMAGE_DELAYLOAD_RVA_BASED: u32 = 0x8000_0000;
2001
2002#[derive(Debug, Clone, Copy)]
2021#[repr(C)]
2022pub struct ImageResourceDirectory {
2023 pub characteristics: U32<LE>,
2024 pub time_date_stamp: U32<LE>,
2025 pub major_version: U16<LE>,
2026 pub minor_version: U16<LE>,
2027 pub number_of_named_entries: U16<LE>,
2028 pub number_of_id_entries: U16<LE>,
2029}
2030
2031pub const IMAGE_RESOURCE_NAME_IS_STRING: u32 = 0x8000_0000;
2032pub const IMAGE_RESOURCE_DATA_IS_DIRECTORY: u32 = 0x8000_0000;
2033#[derive(Debug, Clone, Copy)]
2049#[repr(C)]
2050pub struct ImageResourceDirectoryEntry {
2051 pub name_or_id: U32<LE>,
2052 pub offset_to_data_or_directory: U32<LE>,
2053}
2054
2055#[derive(Debug, Clone, Copy)]
2065#[repr(C)]
2066pub struct ImageResourceDirectoryString {
2067 pub length: U16<LE>,
2068 }
2070
2071#[derive(Debug, Clone, Copy)]
2072#[repr(C)]
2073pub struct ImageResourceDirStringU {
2074 pub length: U16<LE>,
2075 }
2077
2078#[derive(Debug, Clone, Copy)]
2088#[repr(C)]
2089pub struct ImageResourceDataEntry {
2090 pub offset_to_data: U32<LE>,
2092 pub size: U32<LE>,
2093 pub code_page: U32<LE>,
2094 pub reserved: U32<LE>,
2095}
2096
2097pub const RT_CURSOR: u16 = 1;
2101pub const RT_BITMAP: u16 = 2;
2103pub const RT_ICON: u16 = 3;
2105pub const RT_MENU: u16 = 4;
2107pub const RT_DIALOG: u16 = 5;
2109pub const RT_STRING: u16 = 6;
2111pub const RT_FONTDIR: u16 = 7;
2113pub const RT_FONT: u16 = 8;
2115pub const RT_ACCELERATOR: u16 = 9;
2117pub const RT_RCDATA: u16 = 10;
2119pub const RT_MESSAGETABLE: u16 = 11;
2121pub const RT_GROUP_CURSOR: u16 = 12;
2123pub const RT_GROUP_ICON: u16 = 14;
2125pub const RT_VERSION: u16 = 16;
2127pub const RT_DLGINCLUDE: u16 = 17;
2129pub const RT_PLUGPLAY: u16 = 19;
2131pub const RT_VXD: u16 = 20;
2133pub const RT_ANICURSOR: u16 = 21;
2135pub const RT_ANIICON: u16 = 22;
2137pub const RT_HTML: u16 = 23;
2139pub const RT_MANIFEST: u16 = 24;
2141
2142#[derive(Debug, Clone, Copy)]
2147#[repr(C)]
2148pub struct ImageLoadConfigCodeIntegrity {
2149 pub flags: U16<LE>,
2151 pub catalog: U16<LE>,
2153 pub catalog_offset: U32<LE>,
2154 pub reserved: U32<LE>,
2156}
2157
2158#[derive(Debug, Clone, Copy)]
2163#[repr(C)]
2164pub struct ImageDynamicRelocationTable {
2165 pub version: U32<LE>,
2166 pub size: U32<LE>,
2167 }
2169
2170#[derive(Debug, Clone, Copy)]
2175#[repr(C)]
2176pub struct ImageDynamicRelocation32 {
2177 pub symbol: U32<LE>,
2178 pub base_reloc_size: U32<LE>,
2179 }
2181
2182#[derive(Debug, Clone, Copy)]
2183#[repr(C)]
2184pub struct ImageDynamicRelocation64 {
2185 pub symbol: U64<LE>,
2186 pub base_reloc_size: U32<LE>,
2187 }
2189
2190#[derive(Debug, Clone, Copy)]
2191#[repr(C)]
2192pub struct ImageDynamicRelocation32V2 {
2193 pub header_size: U32<LE>,
2194 pub fixup_info_size: U32<LE>,
2195 pub symbol: U32<LE>,
2196 pub symbol_group: U32<LE>,
2197 pub flags: U32<LE>,
2198 }
2201
2202#[derive(Debug, Clone, Copy)]
2203#[repr(C)]
2204pub struct ImageDynamicRelocation64V2 {
2205 pub header_size: U32<LE>,
2206 pub fixup_info_size: U32<LE>,
2207 pub symbol: U64<LE>,
2208 pub symbol_group: U32<LE>,
2209 pub flags: U32<LE>,
2210 }
2213
2214pub const IMAGE_DYNAMIC_RELOCATION_GUARD_RF_PROLOGUE: u32 = 0x0000_0001;
2219pub const IMAGE_DYNAMIC_RELOCATION_GUARD_RF_EPILOGUE: u32 = 0x0000_0002;
2220pub const IMAGE_DYNAMIC_RELOCATION_GUARD_IMPORT_CONTROL_TRANSFER: u32 = 0x0000_0003;
2221pub const IMAGE_DYNAMIC_RELOCATION_GUARD_INDIR_CONTROL_TRANSFER: u32 = 0x0000_0004;
2222pub const IMAGE_DYNAMIC_RELOCATION_GUARD_SWITCHTABLE_BRANCH: u32 = 0x0000_0005;
2223
2224#[derive(Debug, Clone, Copy)]
2226#[repr(C)]
2227pub struct ImagePrologueDynamicRelocationHeader {
2228 pub prologue_byte_count: u8,
2229 }
2231
2232#[derive(Debug, Clone, Copy)]
2234#[repr(C)]
2235pub struct ImageEpilogueDynamicRelocationHeader {
2236 pub epilogue_count: U32<LE>,
2237 pub epilogue_byte_count: u8,
2238 pub branch_descriptor_element_size: u8,
2239 pub branch_descriptor_count: U16<LE>,
2240 }
2243
2244#[derive(Debug, Clone, Copy)]
2280#[repr(C)]
2281pub struct ImageLoadConfigDirectory32 {
2282 pub size: U32<LE>,
2283 pub time_date_stamp: U32<LE>,
2284 pub major_version: U16<LE>,
2285 pub minor_version: U16<LE>,
2286 pub global_flags_clear: U32<LE>,
2287 pub global_flags_set: U32<LE>,
2288 pub critical_section_default_timeout: U32<LE>,
2289 pub de_commit_free_block_threshold: U32<LE>,
2290 pub de_commit_total_free_threshold: U32<LE>,
2291 pub lock_prefix_table: U32<LE>,
2293 pub maximum_allocation_size: U32<LE>,
2294 pub virtual_memory_threshold: U32<LE>,
2295 pub process_heap_flags: U32<LE>,
2296 pub process_affinity_mask: U32<LE>,
2297 pub csd_version: U16<LE>,
2298 pub dependent_load_flags: U16<LE>,
2299 pub edit_list: U32<LE>,
2301 pub security_cookie: U32<LE>,
2303 pub sehandler_table: U32<LE>,
2305 pub sehandler_count: U32<LE>,
2306 pub guard_cf_check_function_pointer: U32<LE>,
2308 pub guard_cf_dispatch_function_pointer: U32<LE>,
2310 pub guard_cf_function_table: U32<LE>,
2312 pub guard_cf_function_count: U32<LE>,
2313 pub guard_flags: U32<LE>,
2314 pub code_integrity: ImageLoadConfigCodeIntegrity,
2315 pub guard_address_taken_iat_entry_table: U32<LE>,
2317 pub guard_address_taken_iat_entry_count: U32<LE>,
2318 pub guard_long_jump_target_table: U32<LE>,
2320 pub guard_long_jump_target_count: U32<LE>,
2321 pub dynamic_value_reloc_table: U32<LE>,
2323 pub chpe_metadata_pointer: U32<LE>,
2324 pub guard_rf_failure_routine: U32<LE>,
2326 pub guard_rf_failure_routine_function_pointer: U32<LE>,
2328 pub dynamic_value_reloc_table_offset: U32<LE>,
2329 pub dynamic_value_reloc_table_section: U16<LE>,
2330 pub reserved2: U16<LE>,
2331 pub guard_rf_verify_stack_pointer_function_pointer: U32<LE>,
2333 pub hot_patch_table_offset: U32<LE>,
2334 pub reserved3: U32<LE>,
2335 pub enclave_configuration_pointer: U32<LE>,
2337 pub volatile_metadata_pointer: U32<LE>,
2339}
2340
2341#[derive(Debug, Clone, Copy)]
2342#[repr(C)]
2343pub struct ImageLoadConfigDirectory64 {
2344 pub size: U32<LE>,
2345 pub time_date_stamp: U32<LE>,
2346 pub major_version: U16<LE>,
2347 pub minor_version: U16<LE>,
2348 pub global_flags_clear: U32<LE>,
2349 pub global_flags_set: U32<LE>,
2350 pub critical_section_default_timeout: U32<LE>,
2351 pub de_commit_free_block_threshold: U64<LE>,
2352 pub de_commit_total_free_threshold: U64<LE>,
2353 pub lock_prefix_table: U64<LE>,
2355 pub maximum_allocation_size: U64<LE>,
2356 pub virtual_memory_threshold: U64<LE>,
2357 pub process_affinity_mask: U64<LE>,
2358 pub process_heap_flags: U32<LE>,
2359 pub csd_version: U16<LE>,
2360 pub dependent_load_flags: U16<LE>,
2361 pub edit_list: U64<LE>,
2363 pub security_cookie: U64<LE>,
2365 pub sehandler_table: U64<LE>,
2367 pub sehandler_count: U64<LE>,
2368 pub guard_cf_check_function_pointer: U64<LE>,
2370 pub guard_cf_dispatch_function_pointer: U64<LE>,
2372 pub guard_cf_function_table: U64<LE>,
2374 pub guard_cf_function_count: U64<LE>,
2375 pub guard_flags: U32<LE>,
2376 pub code_integrity: ImageLoadConfigCodeIntegrity,
2377 pub guard_address_taken_iat_entry_table: U64<LE>,
2379 pub guard_address_taken_iat_entry_count: U64<LE>,
2380 pub guard_long_jump_target_table: U64<LE>,
2382 pub guard_long_jump_target_count: U64<LE>,
2383 pub dynamic_value_reloc_table: U64<LE>,
2385 pub chpe_metadata_pointer: U64<LE>,
2387 pub guard_rf_failure_routine: U64<LE>,
2389 pub guard_rf_failure_routine_function_pointer: U64<LE>,
2391 pub dynamic_value_reloc_table_offset: U32<LE>,
2392 pub dynamic_value_reloc_table_section: U16<LE>,
2393 pub reserved2: U16<LE>,
2394 pub guard_rf_verify_stack_pointer_function_pointer: U64<LE>,
2396 pub hot_patch_table_offset: U32<LE>,
2397 pub reserved3: U32<LE>,
2398 pub enclave_configuration_pointer: U64<LE>,
2400 pub volatile_metadata_pointer: U64<LE>,
2402}
2403
2404#[derive(Debug, Clone, Copy)]
2405#[repr(C)]
2406pub struct ImageHotPatchInfo {
2407 pub version: U32<LE>,
2408 pub size: U32<LE>,
2409 pub sequence_number: U32<LE>,
2410 pub base_image_list: U32<LE>,
2411 pub base_image_count: U32<LE>,
2412 pub buffer_offset: U32<LE>,
2414 pub extra_patch_size: U32<LE>,
2416}
2417
2418#[derive(Debug, Clone, Copy)]
2419#[repr(C)]
2420pub struct ImageHotPatchBase {
2421 pub sequence_number: U32<LE>,
2422 pub flags: U32<LE>,
2423 pub original_time_date_stamp: U32<LE>,
2424 pub original_check_sum: U32<LE>,
2425 pub code_integrity_info: U32<LE>,
2426 pub code_integrity_size: U32<LE>,
2427 pub patch_table: U32<LE>,
2428 pub buffer_offset: U32<LE>,
2430}
2431
2432#[derive(Debug, Clone, Copy)]
2433#[repr(C)]
2434pub struct ImageHotPatchHashes {
2435 pub sha256: [u8; 32],
2436 pub sha1: [u8; 20],
2437}
2438
2439pub const IMAGE_HOT_PATCH_BASE_OBLIGATORY: u32 = 0x0000_0001;
2440pub const IMAGE_HOT_PATCH_BASE_CAN_ROLL_BACK: u32 = 0x0000_0002;
2441
2442pub const IMAGE_HOT_PATCH_CHUNK_INVERSE: u32 = 0x8000_0000;
2443pub const IMAGE_HOT_PATCH_CHUNK_OBLIGATORY: u32 = 0x4000_0000;
2444pub const IMAGE_HOT_PATCH_CHUNK_RESERVED: u32 = 0x3FF0_3000;
2445pub const IMAGE_HOT_PATCH_CHUNK_TYPE: u32 = 0x000F_C000;
2446pub const IMAGE_HOT_PATCH_CHUNK_SOURCE_RVA: u32 = 0x0000_8000;
2447pub const IMAGE_HOT_PATCH_CHUNK_TARGET_RVA: u32 = 0x0000_4000;
2448pub const IMAGE_HOT_PATCH_CHUNK_SIZE: u32 = 0x0000_0FFF;
2449
2450pub const IMAGE_HOT_PATCH_NONE: u32 = 0x0000_0000;
2451pub const IMAGE_HOT_PATCH_FUNCTION: u32 = 0x0001_C000;
2452pub const IMAGE_HOT_PATCH_ABSOLUTE: u32 = 0x0002_C000;
2453pub const IMAGE_HOT_PATCH_REL32: u32 = 0x0003_C000;
2454pub const IMAGE_HOT_PATCH_CALL_TARGET: u32 = 0x0004_4000;
2455pub const IMAGE_HOT_PATCH_INDIRECT: u32 = 0x0005_C000;
2456pub const IMAGE_HOT_PATCH_NO_CALL_TARGET: u32 = 0x0006_4000;
2457pub const IMAGE_HOT_PATCH_DYNAMIC_VALUE: u32 = 0x0007_8000;
2458
2459pub const IMAGE_GUARD_CF_INSTRUMENTED: u32 = 0x0000_0100;
2461pub const IMAGE_GUARD_CFW_INSTRUMENTED: u32 = 0x0000_0200;
2463pub const IMAGE_GUARD_CF_FUNCTION_TABLE_PRESENT: u32 = 0x0000_0400;
2465pub const IMAGE_GUARD_SECURITY_COOKIE_UNUSED: u32 = 0x0000_0800;
2467pub const IMAGE_GUARD_PROTECT_DELAYLOAD_IAT: u32 = 0x0000_1000;
2469pub const IMAGE_GUARD_DELAYLOAD_IAT_IN_ITS_OWN_SECTION: u32 = 0x0000_2000;
2471pub const IMAGE_GUARD_CF_EXPORT_SUPPRESSION_INFO_PRESENT: u32 = 0x0000_4000;
2475pub const IMAGE_GUARD_CF_ENABLE_EXPORT_SUPPRESSION: u32 = 0x0000_8000;
2477pub const IMAGE_GUARD_CF_LONGJUMP_TABLE_PRESENT: u32 = 0x0001_0000;
2479pub const IMAGE_GUARD_RF_INSTRUMENTED: u32 = 0x0002_0000;
2481pub const IMAGE_GUARD_RF_ENABLE: u32 = 0x0004_0000;
2483pub const IMAGE_GUARD_RF_STRICT: u32 = 0x0008_0000;
2485pub const IMAGE_GUARD_RETPOLINE_PRESENT: u32 = 0x0010_0000;
2487
2488pub const IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_MASK: u32 = 0xF000_0000;
2490pub const IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_SHIFT: u32 = 28;
2492
2493pub const IMAGE_GUARD_FLAG_FID_SUPPRESSED: u16 = 0x01;
2499pub const IMAGE_GUARD_FLAG_EXPORT_SUPPRESSED: u16 = 0x02;
2501
2502#[derive(Debug, Clone, Copy)]
2525#[repr(C)]
2526pub struct ImageArmRuntimeFunctionEntry {
2527 pub begin_address: U32<LE>,
2528 pub unwind_data: U32<LE>,
2529}
2530
2531#[derive(Debug, Clone, Copy)]
2532#[repr(C)]
2533pub struct ImageArm64RuntimeFunctionEntry {
2534 pub begin_address: U32<LE>,
2535 pub unwind_data: U32<LE>,
2536}
2537
2538#[derive(Debug, Clone, Copy)]
2539#[repr(C)]
2540pub struct ImageAlpha64RuntimeFunctionEntry {
2541 pub begin_address: U64<LE>,
2542 pub end_address: U64<LE>,
2543 pub exception_handler: U64<LE>,
2544 pub handler_data: U64<LE>,
2545 pub prolog_end_address: U64<LE>,
2546}
2547
2548#[derive(Debug, Clone, Copy)]
2549#[repr(C)]
2550pub struct ImageAlphaRuntimeFunctionEntry {
2551 pub begin_address: U32<LE>,
2552 pub end_address: U32<LE>,
2553 pub exception_handler: U32<LE>,
2554 pub handler_data: U32<LE>,
2555 pub prolog_end_address: U32<LE>,
2556}
2557
2558#[derive(Debug, Clone, Copy)]
2559#[repr(C)]
2560pub struct ImageRuntimeFunctionEntry {
2561 pub begin_address: U32<LE>,
2562 pub end_address: U32<LE>,
2563 pub unwind_info_address_or_data: U32<LE>,
2564}
2565
2566pub const IMAGE_ENCLAVE_LONG_ID_LENGTH: usize = 32;
2571pub const IMAGE_ENCLAVE_SHORT_ID_LENGTH: usize = 16;
2572
2573#[derive(Debug, Clone, Copy)]
2574#[repr(C)]
2575pub struct ImageEnclaveConfig32 {
2576 pub size: U32<LE>,
2577 pub minimum_required_config_size: U32<LE>,
2578 pub policy_flags: U32<LE>,
2579 pub number_of_imports: U32<LE>,
2580 pub import_list: U32<LE>,
2581 pub import_entry_size: U32<LE>,
2582 pub family_id: [u8; IMAGE_ENCLAVE_SHORT_ID_LENGTH],
2583 pub image_id: [u8; IMAGE_ENCLAVE_SHORT_ID_LENGTH],
2584 pub image_version: U32<LE>,
2585 pub security_version: U32<LE>,
2586 pub enclave_size: U32<LE>,
2587 pub number_of_threads: U32<LE>,
2588 pub enclave_flags: U32<LE>,
2589}
2590
2591#[derive(Debug, Clone, Copy)]
2592#[repr(C)]
2593pub struct ImageEnclaveConfig64 {
2594 pub size: U32<LE>,
2595 pub minimum_required_config_size: U32<LE>,
2596 pub policy_flags: U32<LE>,
2597 pub number_of_imports: U32<LE>,
2598 pub import_list: U32<LE>,
2599 pub import_entry_size: U32<LE>,
2600 pub family_id: [u8; IMAGE_ENCLAVE_SHORT_ID_LENGTH],
2601 pub image_id: [u8; IMAGE_ENCLAVE_SHORT_ID_LENGTH],
2602 pub image_version: U32<LE>,
2603 pub security_version: U32<LE>,
2604 pub enclave_size: U64<LE>,
2605 pub number_of_threads: U32<LE>,
2606 pub enclave_flags: U32<LE>,
2607}
2608
2609pub const IMAGE_ENCLAVE_POLICY_DEBUGGABLE: u32 = 0x0000_0001;
2612
2613pub const IMAGE_ENCLAVE_FLAG_PRIMARY_IMAGE: u32 = 0x0000_0001;
2614
2615#[derive(Debug, Clone, Copy)]
2616#[repr(C)]
2617pub struct ImageEnclaveImport {
2618 pub match_type: U32<LE>,
2619 pub minimum_security_version: U32<LE>,
2620 pub unique_or_author_id: [u8; IMAGE_ENCLAVE_LONG_ID_LENGTH],
2621 pub family_id: [u8; IMAGE_ENCLAVE_SHORT_ID_LENGTH],
2622 pub image_id: [u8; IMAGE_ENCLAVE_SHORT_ID_LENGTH],
2623 pub import_name: U32<LE>,
2624 pub reserved: U32<LE>,
2625}
2626
2627pub const IMAGE_ENCLAVE_IMPORT_MATCH_NONE: u32 = 0x0000_0000;
2628pub const IMAGE_ENCLAVE_IMPORT_MATCH_UNIQUE_ID: u32 = 0x0000_0001;
2629pub const IMAGE_ENCLAVE_IMPORT_MATCH_AUTHOR_ID: u32 = 0x0000_0002;
2630pub const IMAGE_ENCLAVE_IMPORT_MATCH_FAMILY_ID: u32 = 0x0000_0003;
2631pub const IMAGE_ENCLAVE_IMPORT_MATCH_IMAGE_ID: u32 = 0x0000_0004;
2632
2633#[derive(Debug, Clone, Copy)]
2638#[repr(C)]
2639pub struct ImageDebugDirectory {
2640 pub characteristics: U32<LE>,
2641 pub time_date_stamp: U32<LE>,
2642 pub major_version: U16<LE>,
2643 pub minor_version: U16<LE>,
2644 pub typ: U32<LE>,
2645 pub size_of_data: U32<LE>,
2646 pub address_of_raw_data: U32<LE>,
2647 pub pointer_to_raw_data: U32<LE>,
2648}
2649
2650pub const IMAGE_DEBUG_TYPE_UNKNOWN: u32 = 0;
2651pub const IMAGE_DEBUG_TYPE_COFF: u32 = 1;
2652pub const IMAGE_DEBUG_TYPE_CODEVIEW: u32 = 2;
2653pub const IMAGE_DEBUG_TYPE_FPO: u32 = 3;
2654pub const IMAGE_DEBUG_TYPE_MISC: u32 = 4;
2655pub const IMAGE_DEBUG_TYPE_EXCEPTION: u32 = 5;
2656pub const IMAGE_DEBUG_TYPE_FIXUP: u32 = 6;
2657pub const IMAGE_DEBUG_TYPE_OMAP_TO_SRC: u32 = 7;
2658pub const IMAGE_DEBUG_TYPE_OMAP_FROM_SRC: u32 = 8;
2659pub const IMAGE_DEBUG_TYPE_BORLAND: u32 = 9;
2660pub const IMAGE_DEBUG_TYPE_RESERVED10: u32 = 10;
2661pub const IMAGE_DEBUG_TYPE_CLSID: u32 = 11;
2662pub const IMAGE_DEBUG_TYPE_VC_FEATURE: u32 = 12;
2663pub const IMAGE_DEBUG_TYPE_POGO: u32 = 13;
2664pub const IMAGE_DEBUG_TYPE_ILTCG: u32 = 14;
2665pub const IMAGE_DEBUG_TYPE_MPX: u32 = 15;
2666pub const IMAGE_DEBUG_TYPE_REPRO: u32 = 16;
2667
2668#[derive(Debug, Clone, Copy)]
2669#[repr(C)]
2670pub struct ImageCoffSymbolsHeader {
2671 pub number_of_symbols: U32<LE>,
2672 pub lva_to_first_symbol: U32<LE>,
2673 pub number_of_linenumbers: U32<LE>,
2674 pub lva_to_first_linenumber: U32<LE>,
2675 pub rva_to_first_byte_of_code: U32<LE>,
2676 pub rva_to_last_byte_of_code: U32<LE>,
2677 pub rva_to_first_byte_of_data: U32<LE>,
2678 pub rva_to_last_byte_of_data: U32<LE>,
2679}
2680
2681pub const FRAME_FPO: u16 = 0;
2682pub const FRAME_TRAP: u16 = 1;
2683pub const FRAME_TSS: u16 = 2;
2684pub const FRAME_NONFPO: u16 = 3;
2685
2686pub const IMAGE_DEBUG_MISC_EXENAME: u16 = 1;
2716
2717#[derive(Debug, Clone, Copy)]
2718#[repr(C)]
2719pub struct ImageDebugMisc {
2720 pub data_type: U32<LE>,
2722 pub length: U32<LE>,
2724 pub unicode: u8,
2726 pub reserved: [u8; 3],
2727 }
2730
2731#[derive(Debug, Clone, Copy)]
2738#[repr(C)]
2739pub struct ImageFunctionEntry {
2740 pub starting_address: U32<LE>,
2741 pub ending_address: U32<LE>,
2742 pub end_of_prologue: U32<LE>,
2743}
2744
2745#[derive(Debug, Clone, Copy)]
2746#[repr(C)]
2747pub struct ImageFunctionEntry64 {
2748 pub starting_address: U64<LE>,
2749 pub ending_address: U64<LE>,
2750 pub end_of_prologue_or_unwind_info_address: U64<LE>,
2751}
2752
2753#[derive(Debug, Clone, Copy)]
2774#[repr(C)]
2775pub struct ImageSeparateDebugHeader {
2776 pub signature: U16<LE>,
2777 pub flags: U16<LE>,
2778 pub machine: U16<LE>,
2779 pub characteristics: U16<LE>,
2780 pub time_date_stamp: U32<LE>,
2781 pub check_sum: U32<LE>,
2782 pub image_base: U32<LE>,
2783 pub size_of_image: U32<LE>,
2784 pub number_of_sections: U32<LE>,
2785 pub exported_names_size: U32<LE>,
2786 pub debug_directory_size: U32<LE>,
2787 pub section_alignment: U32<LE>,
2788 pub reserved: [U32<LE>; 2],
2789}
2790
2791#[derive(Debug, Clone, Copy)]
2792#[repr(C)]
2793pub struct NonPagedDebugInfo {
2794 pub signature: U16<LE>,
2795 pub flags: U16<LE>,
2796 pub size: U32<LE>,
2797 pub machine: U16<LE>,
2798 pub characteristics: U16<LE>,
2799 pub time_date_stamp: U32<LE>,
2800 pub check_sum: U32<LE>,
2801 pub size_of_image: U32<LE>,
2802 pub image_base: U64<LE>,
2803 }
2806
2807pub const IMAGE_SEPARATE_DEBUG_SIGNATURE: u16 = 0x4944;
2808pub const NON_PAGED_DEBUG_SIGNATURE: u16 = 0x494E;
2809
2810pub const IMAGE_SEPARATE_DEBUG_FLAGS_MASK: u16 = 0x8000;
2811pub const IMAGE_SEPARATE_DEBUG_MISMATCH: u16 = 0x8000;
2813
2814#[derive(Debug, Clone, Copy)]
2842#[repr(C)]
2843pub struct ImageArchitectureEntry {
2844 pub fixup_inst_rva: U32<LE>,
2846 pub new_inst: U32<LE>,
2848}
2849
2850pub const IMPORT_OBJECT_HDR_SIG2: u16 = 0xffff;
2856
2857#[derive(Debug, Clone, Copy)]
2858#[repr(C)]
2859pub struct ImportObjectHeader {
2860 pub sig1: U16<LE>,
2862 pub sig2: U16<LE>,
2864 pub version: U16<LE>,
2865 pub machine: U16<LE>,
2866 pub time_date_stamp: U32<LE>,
2868 pub size_of_data: U32<LE>,
2870
2871 pub ordinal_or_hint: U16<LE>,
2873
2874 pub name_type: U16<LE>,
2878}
2879
2880pub const IMPORT_OBJECT_TYPE_MASK: u16 = 0b11;
2881pub const IMPORT_OBJECT_TYPE_SHIFT: u16 = 0;
2882pub const IMPORT_OBJECT_CODE: u16 = 0;
2883pub const IMPORT_OBJECT_DATA: u16 = 1;
2884pub const IMPORT_OBJECT_CONST: u16 = 2;
2885
2886pub const IMPORT_OBJECT_NAME_MASK: u16 = 0b111;
2887pub const IMPORT_OBJECT_NAME_SHIFT: u16 = 2;
2888pub const IMPORT_OBJECT_ORDINAL: u16 = 0;
2890pub const IMPORT_OBJECT_NAME: u16 = 1;
2892pub const IMPORT_OBJECT_NAME_NO_PREFIX: u16 = 2;
2894pub const IMPORT_OBJECT_NAME_UNDECORATE: u16 = 3;
2896pub const IMPORT_OBJECT_NAME_EXPORTAS: u16 = 4;
2898
2899pub const COMIMAGE_FLAGS_ILONLY: u32 = 0x0000_0001;
2901pub const COMIMAGE_FLAGS_32BITREQUIRED: u32 = 0x0000_0002;
2902pub const COMIMAGE_FLAGS_IL_LIBRARY: u32 = 0x0000_0004;
2903pub const COMIMAGE_FLAGS_STRONGNAMESIGNED: u32 = 0x0000_0008;
2904pub const COMIMAGE_FLAGS_NATIVE_ENTRYPOINT: u32 = 0x0000_0010;
2905pub const COMIMAGE_FLAGS_TRACKDEBUGDATA: u32 = 0x0001_0000;
2906pub const COMIMAGE_FLAGS_32BITPREFERRED: u32 = 0x0002_0000;
2907
2908pub const COR_VERSION_MAJOR_V2: u16 = 2;
2910pub const COR_VERSION_MAJOR: u16 = COR_VERSION_MAJOR_V2;
2911pub const COR_VERSION_MINOR: u16 = 5;
2912pub const COR_DELETED_NAME_LENGTH: usize = 8;
2913pub const COR_VTABLEGAP_NAME_LENGTH: usize = 8;
2914
2915pub const NATIVE_TYPE_MAX_CB: u16 = 1;
2917pub const COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE: u16 = 0xFF;
2918
2919pub const IMAGE_COR_MIH_METHODRVA: u16 = 0x01;
2921pub const IMAGE_COR_MIH_EHRVA: u16 = 0x02;
2922pub const IMAGE_COR_MIH_BASICBLOCK: u16 = 0x08;
2923
2924pub const COR_VTABLE_32BIT: u16 = 0x01;
2927pub const COR_VTABLE_64BIT: u16 = 0x02;
2929pub const COR_VTABLE_FROM_UNMANAGED: u16 = 0x04;
2931pub const COR_VTABLE_FROM_UNMANAGED_RETAIN_APPDOMAIN: u16 = 0x08;
2933pub const COR_VTABLE_CALL_MOST_DERIVED: u16 = 0x10;
2935
2936pub const IMAGE_COR_EATJ_THUNK_SIZE: usize = 32;
2939
2940pub const MAX_CLASS_NAME: usize = 1024;
2942pub const MAX_PACKAGE_NAME: usize = 1024;
2943
2944#[derive(Debug, Clone, Copy)]
2946#[repr(C)]
2947pub struct ImageCor20Header {
2948 pub cb: U32<LE>,
2950 pub major_runtime_version: U16<LE>,
2951 pub minor_runtime_version: U16<LE>,
2952
2953 pub meta_data: ImageDataDirectory,
2955 pub flags: U32<LE>,
2956
2957 pub entry_point_token_or_rva: U32<LE>,
2960
2961 pub resources: ImageDataDirectory,
2963 pub strong_name_signature: ImageDataDirectory,
2964
2965 pub code_manager_table: ImageDataDirectory,
2967 pub vtable_fixups: ImageDataDirectory,
2968 pub export_address_table_jumps: ImageDataDirectory,
2969
2970 pub managed_native_header: ImageDataDirectory,
2972}
2973
2974unsafe_impl_pod!(
2975 ImageDosHeader,
2976 ImageOs2Header,
2977 ImageVxdHeader,
2978 ImageFileHeader,
2979 ImageDataDirectory,
2980 ImageOptionalHeader32,
2981 ImageRomOptionalHeader,
2982 ImageOptionalHeader64,
2983 ImageNtHeaders64,
2984 ImageNtHeaders32,
2985 ImageRomHeaders,
2986 Guid,
2987 AnonObjectHeader,
2988 AnonObjectHeaderV2,
2989 AnonObjectHeaderBigobj,
2990 ImageSectionHeader,
2991 ImageSymbol,
2992 ImageSymbolBytes,
2993 ImageSymbolEx,
2994 ImageSymbolExBytes,
2995 ImageAuxSymbolTokenDef,
2996 ImageAuxSymbolFunction,
2997 ImageAuxSymbolFunctionBeginEnd,
2998 ImageAuxSymbolWeak,
2999 ImageAuxSymbolSection,
3000 ImageAuxSymbolCrc,
3001 ImageRelocation,
3002 ImageLinenumber,
3003 ImageBaseRelocation,
3004 ImageArchiveMemberHeader,
3005 ImageExportDirectory,
3006 ImageImportByName,
3007 ImageThunkData64,
3008 ImageThunkData32,
3009 ImageTlsDirectory64,
3010 ImageTlsDirectory32,
3011 ImageImportDescriptor,
3012 ImageBoundImportDescriptor,
3013 ImageBoundForwarderRef,
3014 ImageDelayloadDescriptor,
3015 ImageResourceDirectory,
3016 ImageResourceDirectoryEntry,
3017 ImageResourceDirectoryString,
3018 ImageResourceDirStringU,
3019 ImageResourceDataEntry,
3020 ImageLoadConfigCodeIntegrity,
3021 ImageDynamicRelocationTable,
3022 ImageDynamicRelocation32,
3023 ImageDynamicRelocation64,
3024 ImageDynamicRelocation32V2,
3025 ImageDynamicRelocation64V2,
3026 ImagePrologueDynamicRelocationHeader,
3027 ImageEpilogueDynamicRelocationHeader,
3028 ImageLoadConfigDirectory32,
3032 ImageLoadConfigDirectory64,
3033 ImageHotPatchInfo,
3034 ImageHotPatchBase,
3035 ImageHotPatchHashes,
3036 ImageArmRuntimeFunctionEntry,
3038 ImageArm64RuntimeFunctionEntry,
3039 ImageAlpha64RuntimeFunctionEntry,
3040 ImageAlphaRuntimeFunctionEntry,
3041 ImageRuntimeFunctionEntry,
3042 ImageEnclaveConfig32,
3043 ImageEnclaveConfig64,
3044 ImageEnclaveImport,
3045 ImageDebugDirectory,
3046 ImageCoffSymbolsHeader,
3047 ImageDebugMisc,
3049 ImageFunctionEntry,
3050 ImageFunctionEntry64,
3051 ImageSeparateDebugHeader,
3052 NonPagedDebugInfo,
3053 ImageArchitectureEntry,
3055 ImportObjectHeader,
3056 ImageCor20Header,
3057 MaskedRichHeaderEntry,
3058);