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_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)]
816#[repr(C)]
817pub struct ImageSymbol {
818 pub name: [u8; 8],
820 pub value: U32Bytes<LE>,
821 pub section_number: U16Bytes<LE>,
822 pub typ: U16Bytes<LE>,
823 pub storage_class: u8,
824 pub number_of_aux_symbols: u8,
825}
826
827pub const IMAGE_SIZEOF_SYMBOL: usize = 18;
828
829#[derive(Debug, Clone, Copy)]
830#[repr(C)]
831pub struct ImageSymbolBytes(pub [u8; IMAGE_SIZEOF_SYMBOL]);
832
833#[derive(Debug, Clone, Copy)]
835#[repr(C)]
836pub struct ImageSymbolEx {
837 pub name: [u8; 8],
839 pub value: U32Bytes<LE>,
840 pub section_number: I32Bytes<LE>,
841 pub typ: U16Bytes<LE>,
842 pub storage_class: u8,
843 pub number_of_aux_symbols: u8,
844}
845
846pub const IMAGE_SIZEOF_SYMBOL_EX: usize = 20;
847
848#[derive(Debug, Clone, Copy)]
849#[repr(C)]
850pub struct ImageSymbolExBytes(pub [u8; IMAGE_SIZEOF_SYMBOL_EX]);
851
852pub const IMAGE_SYM_UNDEFINED: i32 = 0;
859pub const IMAGE_SYM_ABSOLUTE: i32 = -1;
861pub const IMAGE_SYM_DEBUG: i32 = -2;
863pub const IMAGE_SYM_SECTION_MAX: u16 = 0xFEFF;
865pub const IMAGE_SYM_SECTION_MAX_EX: u32 = 0x7fff_ffff;
866
867pub const IMAGE_SYM_TYPE_NULL: u16 = 0x0000;
871pub const IMAGE_SYM_TYPE_VOID: u16 = 0x0001;
872pub const IMAGE_SYM_TYPE_CHAR: u16 = 0x0002;
874pub const IMAGE_SYM_TYPE_SHORT: u16 = 0x0003;
876pub const IMAGE_SYM_TYPE_INT: u16 = 0x0004;
877pub const IMAGE_SYM_TYPE_LONG: u16 = 0x0005;
878pub const IMAGE_SYM_TYPE_FLOAT: u16 = 0x0006;
879pub const IMAGE_SYM_TYPE_DOUBLE: u16 = 0x0007;
880pub const IMAGE_SYM_TYPE_STRUCT: u16 = 0x0008;
881pub const IMAGE_SYM_TYPE_UNION: u16 = 0x0009;
882pub const IMAGE_SYM_TYPE_ENUM: u16 = 0x000A;
884pub const IMAGE_SYM_TYPE_MOE: u16 = 0x000B;
886pub const IMAGE_SYM_TYPE_BYTE: u16 = 0x000C;
887pub const IMAGE_SYM_TYPE_WORD: u16 = 0x000D;
888pub const IMAGE_SYM_TYPE_UINT: u16 = 0x000E;
889pub const IMAGE_SYM_TYPE_DWORD: u16 = 0x000F;
890pub const IMAGE_SYM_TYPE_PCODE: u16 = 0x8000;
891
892pub const IMAGE_SYM_DTYPE_NULL: u16 = 0;
896pub const IMAGE_SYM_DTYPE_POINTER: u16 = 1;
898pub const IMAGE_SYM_DTYPE_FUNCTION: u16 = 2;
900pub const IMAGE_SYM_DTYPE_ARRAY: u16 = 3;
902
903pub const IMAGE_SYM_CLASS_END_OF_FUNCTION: u8 = 0xff;
905pub const IMAGE_SYM_CLASS_NULL: u8 = 0x00;
906pub const IMAGE_SYM_CLASS_AUTOMATIC: u8 = 0x01;
907pub const IMAGE_SYM_CLASS_EXTERNAL: u8 = 0x02;
908pub const IMAGE_SYM_CLASS_STATIC: u8 = 0x03;
909pub const IMAGE_SYM_CLASS_REGISTER: u8 = 0x04;
910pub const IMAGE_SYM_CLASS_EXTERNAL_DEF: u8 = 0x05;
911pub const IMAGE_SYM_CLASS_LABEL: u8 = 0x06;
912pub const IMAGE_SYM_CLASS_UNDEFINED_LABEL: u8 = 0x07;
913pub const IMAGE_SYM_CLASS_MEMBER_OF_STRUCT: u8 = 0x08;
914pub const IMAGE_SYM_CLASS_ARGUMENT: u8 = 0x09;
915pub const IMAGE_SYM_CLASS_STRUCT_TAG: u8 = 0x0A;
916pub const IMAGE_SYM_CLASS_MEMBER_OF_UNION: u8 = 0x0B;
917pub const IMAGE_SYM_CLASS_UNION_TAG: u8 = 0x0C;
918pub const IMAGE_SYM_CLASS_TYPE_DEFINITION: u8 = 0x0D;
919pub const IMAGE_SYM_CLASS_UNDEFINED_STATIC: u8 = 0x0E;
920pub const IMAGE_SYM_CLASS_ENUM_TAG: u8 = 0x0F;
921pub const IMAGE_SYM_CLASS_MEMBER_OF_ENUM: u8 = 0x10;
922pub const IMAGE_SYM_CLASS_REGISTER_PARAM: u8 = 0x11;
923pub const IMAGE_SYM_CLASS_BIT_FIELD: u8 = 0x12;
924
925pub const IMAGE_SYM_CLASS_FAR_EXTERNAL: u8 = 0x44;
926
927pub const IMAGE_SYM_CLASS_BLOCK: u8 = 0x64;
928pub const IMAGE_SYM_CLASS_FUNCTION: u8 = 0x65;
929pub const IMAGE_SYM_CLASS_END_OF_STRUCT: u8 = 0x66;
930pub const IMAGE_SYM_CLASS_FILE: u8 = 0x67;
931pub const IMAGE_SYM_CLASS_SECTION: u8 = 0x68;
933pub const IMAGE_SYM_CLASS_WEAK_EXTERNAL: u8 = 0x69;
934
935pub const IMAGE_SYM_CLASS_CLR_TOKEN: u8 = 0x6B;
936
937pub const N_BTMASK: u16 = 0x000F;
940pub const N_TMASK: u16 = 0x0030;
941pub const N_TMASK1: u16 = 0x00C0;
942pub const N_TMASK2: u16 = 0x00F0;
943pub const N_BTSHFT: usize = 4;
944pub const N_TSHIFT: usize = 2;
945
946pub const IMAGE_SYM_DTYPE_SHIFT: usize = N_BTSHFT;
947
948#[derive(Debug, Clone, Copy)]
955#[repr(C)]
956pub struct ImageAuxSymbolTokenDef {
957 pub aux_type: u8,
959 pub reserved1: u8,
961 pub symbol_table_index: U32Bytes<LE>,
962 pub reserved2: [u8; 12],
964}
965
966pub const IMAGE_AUX_SYMBOL_TYPE_TOKEN_DEF: u16 = 1;
967
968#[derive(Debug, Clone, Copy)]
971#[repr(C)]
972pub struct ImageAuxSymbolFunction {
973 pub tag_index: U32Bytes<LE>,
974 pub total_size: U32Bytes<LE>,
975 pub pointer_to_linenumber: U32Bytes<LE>,
976 pub pointer_to_next_function: U32Bytes<LE>,
977 pub unused: [u8; 2],
978}
979
980#[derive(Debug, Clone, Copy)]
983#[repr(C)]
984pub struct ImageAuxSymbolFunctionBeginEnd {
985 pub unused1: [u8; 4],
986 pub linenumber: U16Bytes<LE>,
988 pub unused2: [u8; 6],
989 pub pointer_to_next_function: U32Bytes<LE>,
990 pub unused3: [u8; 2],
991}
992
993#[derive(Debug, Clone, Copy)]
998#[repr(C)]
999pub struct ImageAuxSymbolWeak {
1000 pub weak_default_sym_index: U32Bytes<LE>,
1002 pub weak_search_type: U32Bytes<LE>,
1003}
1004
1005#[derive(Debug, Clone, Copy)]
1010#[repr(C)]
1011pub struct ImageAuxSymbolSection {
1012 pub length: U32Bytes<LE>,
1014 pub number_of_relocations: U16Bytes<LE>,
1016 pub number_of_linenumbers: U16Bytes<LE>,
1018 pub check_sum: U32Bytes<LE>,
1020 pub number: U16Bytes<LE>,
1022 pub selection: u8,
1024 pub reserved: u8,
1025 pub high_number: U16Bytes<LE>,
1027}
1028
1029#[derive(Debug, Clone, Copy)]
1032#[repr(C)]
1033pub struct ImageAuxSymbolCrc {
1034 pub crc: U32Bytes<LE>,
1035}
1036
1037pub const IMAGE_COMDAT_SELECT_NODUPLICATES: u8 = 1;
1042pub const IMAGE_COMDAT_SELECT_ANY: u8 = 2;
1043pub const IMAGE_COMDAT_SELECT_SAME_SIZE: u8 = 3;
1044pub const IMAGE_COMDAT_SELECT_EXACT_MATCH: u8 = 4;
1045pub const IMAGE_COMDAT_SELECT_ASSOCIATIVE: u8 = 5;
1046pub const IMAGE_COMDAT_SELECT_LARGEST: u8 = 6;
1047pub const IMAGE_COMDAT_SELECT_NEWEST: u8 = 7;
1048
1049pub const IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY: u32 = 1;
1050pub const IMAGE_WEAK_EXTERN_SEARCH_LIBRARY: u32 = 2;
1051pub const IMAGE_WEAK_EXTERN_SEARCH_ALIAS: u32 = 3;
1052pub const IMAGE_WEAK_EXTERN_ANTI_DEPENDENCY: u32 = 4;
1053
1054#[derive(Debug, Clone, Copy)]
1060#[repr(C)]
1061pub struct ImageRelocation {
1062 pub virtual_address: U32Bytes<LE>,
1064 pub symbol_table_index: U32Bytes<LE>,
1065 pub typ: U16Bytes<LE>,
1066}
1067
1068pub const IMAGE_REL_I386_ABSOLUTE: u16 = 0x0000;
1073pub const IMAGE_REL_I386_DIR16: u16 = 0x0001;
1075pub const IMAGE_REL_I386_REL16: u16 = 0x0002;
1077pub const IMAGE_REL_I386_DIR32: u16 = 0x0006;
1079pub const IMAGE_REL_I386_DIR32NB: u16 = 0x0007;
1081pub const IMAGE_REL_I386_SEG12: u16 = 0x0009;
1083pub const IMAGE_REL_I386_SECTION: u16 = 0x000A;
1084pub const IMAGE_REL_I386_SECREL: u16 = 0x000B;
1085pub const IMAGE_REL_I386_TOKEN: u16 = 0x000C;
1087pub const IMAGE_REL_I386_SECREL7: u16 = 0x000D;
1089pub const IMAGE_REL_I386_REL32: u16 = 0x0014;
1091
1092pub const IMAGE_REL_MIPS_ABSOLUTE: u16 = 0x0000;
1097pub const IMAGE_REL_MIPS_REFHALF: u16 = 0x0001;
1098pub const IMAGE_REL_MIPS_REFWORD: u16 = 0x0002;
1099pub const IMAGE_REL_MIPS_JMPADDR: u16 = 0x0003;
1100pub const IMAGE_REL_MIPS_REFHI: u16 = 0x0004;
1101pub const IMAGE_REL_MIPS_REFLO: u16 = 0x0005;
1102pub const IMAGE_REL_MIPS_GPREL: u16 = 0x0006;
1103pub const IMAGE_REL_MIPS_LITERAL: u16 = 0x0007;
1104pub const IMAGE_REL_MIPS_SECTION: u16 = 0x000A;
1105pub const IMAGE_REL_MIPS_SECREL: u16 = 0x000B;
1106pub const IMAGE_REL_MIPS_SECRELLO: u16 = 0x000C;
1108pub const IMAGE_REL_MIPS_SECRELHI: u16 = 0x000D;
1110pub const IMAGE_REL_MIPS_TOKEN: u16 = 0x000E;
1112pub const IMAGE_REL_MIPS_JMPADDR16: u16 = 0x0010;
1113pub const IMAGE_REL_MIPS_REFWORDNB: u16 = 0x0022;
1114pub const IMAGE_REL_MIPS_PAIR: u16 = 0x0025;
1115
1116pub const IMAGE_REL_ALPHA_ABSOLUTE: u16 = 0x0000;
1120pub const IMAGE_REL_ALPHA_REFLONG: u16 = 0x0001;
1121pub const IMAGE_REL_ALPHA_REFQUAD: u16 = 0x0002;
1122pub const IMAGE_REL_ALPHA_GPREL32: u16 = 0x0003;
1123pub const IMAGE_REL_ALPHA_LITERAL: u16 = 0x0004;
1124pub const IMAGE_REL_ALPHA_LITUSE: u16 = 0x0005;
1125pub const IMAGE_REL_ALPHA_GPDISP: u16 = 0x0006;
1126pub const IMAGE_REL_ALPHA_BRADDR: u16 = 0x0007;
1127pub const IMAGE_REL_ALPHA_HINT: u16 = 0x0008;
1128pub const IMAGE_REL_ALPHA_INLINE_REFLONG: u16 = 0x0009;
1129pub const IMAGE_REL_ALPHA_REFHI: u16 = 0x000A;
1130pub const IMAGE_REL_ALPHA_REFLO: u16 = 0x000B;
1131pub const IMAGE_REL_ALPHA_PAIR: u16 = 0x000C;
1132pub const IMAGE_REL_ALPHA_MATCH: u16 = 0x000D;
1133pub const IMAGE_REL_ALPHA_SECTION: u16 = 0x000E;
1134pub const IMAGE_REL_ALPHA_SECREL: u16 = 0x000F;
1135pub const IMAGE_REL_ALPHA_REFLONGNB: u16 = 0x0010;
1136pub const IMAGE_REL_ALPHA_SECRELLO: u16 = 0x0011;
1138pub const IMAGE_REL_ALPHA_SECRELHI: u16 = 0x0012;
1140pub const IMAGE_REL_ALPHA_REFQ3: u16 = 0x0013;
1142pub const IMAGE_REL_ALPHA_REFQ2: u16 = 0x0014;
1144pub const IMAGE_REL_ALPHA_REFQ1: u16 = 0x0015;
1146pub const IMAGE_REL_ALPHA_GPRELLO: u16 = 0x0016;
1148pub const IMAGE_REL_ALPHA_GPRELHI: u16 = 0x0017;
1150
1151pub const IMAGE_REL_PPC_ABSOLUTE: u16 = 0x0000;
1156pub const IMAGE_REL_PPC_ADDR64: u16 = 0x0001;
1158pub const IMAGE_REL_PPC_ADDR32: u16 = 0x0002;
1160pub const IMAGE_REL_PPC_ADDR24: u16 = 0x0003;
1162pub const IMAGE_REL_PPC_ADDR16: u16 = 0x0004;
1164pub const IMAGE_REL_PPC_ADDR14: u16 = 0x0005;
1166pub const IMAGE_REL_PPC_REL24: u16 = 0x0006;
1168pub const IMAGE_REL_PPC_REL14: u16 = 0x0007;
1170pub const IMAGE_REL_PPC_TOCREL16: u16 = 0x0008;
1172pub const IMAGE_REL_PPC_TOCREL14: u16 = 0x0009;
1174
1175pub const IMAGE_REL_PPC_ADDR32NB: u16 = 0x000A;
1177pub const IMAGE_REL_PPC_SECREL: u16 = 0x000B;
1179pub const IMAGE_REL_PPC_SECTION: u16 = 0x000C;
1181pub const IMAGE_REL_PPC_IFGLUE: u16 = 0x000D;
1183pub const IMAGE_REL_PPC_IMGLUE: u16 = 0x000E;
1185pub const IMAGE_REL_PPC_SECREL16: u16 = 0x000F;
1187pub const IMAGE_REL_PPC_REFHI: u16 = 0x0010;
1188pub const IMAGE_REL_PPC_REFLO: u16 = 0x0011;
1189pub const IMAGE_REL_PPC_PAIR: u16 = 0x0012;
1190pub const IMAGE_REL_PPC_SECRELLO: u16 = 0x0013;
1192pub const IMAGE_REL_PPC_SECRELHI: u16 = 0x0014;
1194pub const IMAGE_REL_PPC_GPREL: u16 = 0x0015;
1195pub const IMAGE_REL_PPC_TOKEN: u16 = 0x0016;
1197
1198pub const IMAGE_REL_PPC_TYPEMASK: u16 = 0x00FF;
1200
1201pub const IMAGE_REL_PPC_NEG: u16 = 0x0100;
1205pub const IMAGE_REL_PPC_BRTAKEN: u16 = 0x0200;
1207pub const IMAGE_REL_PPC_BRNTAKEN: u16 = 0x0400;
1209pub const IMAGE_REL_PPC_TOCDEFN: u16 = 0x0800;
1211
1212pub const IMAGE_REL_SH3_ABSOLUTE: u16 = 0x0000;
1217pub const IMAGE_REL_SH3_DIRECT16: u16 = 0x0001;
1219pub const IMAGE_REL_SH3_DIRECT32: u16 = 0x0002;
1221pub const IMAGE_REL_SH3_DIRECT8: u16 = 0x0003;
1223pub const IMAGE_REL_SH3_DIRECT8_WORD: u16 = 0x0004;
1225pub const IMAGE_REL_SH3_DIRECT8_LONG: u16 = 0x0005;
1227pub const IMAGE_REL_SH3_DIRECT4: u16 = 0x0006;
1229pub const IMAGE_REL_SH3_DIRECT4_WORD: u16 = 0x0007;
1231pub const IMAGE_REL_SH3_DIRECT4_LONG: u16 = 0x0008;
1233pub const IMAGE_REL_SH3_PCREL8_WORD: u16 = 0x0009;
1235pub const IMAGE_REL_SH3_PCREL8_LONG: u16 = 0x000A;
1237pub const IMAGE_REL_SH3_PCREL12_WORD: u16 = 0x000B;
1239pub const IMAGE_REL_SH3_STARTOF_SECTION: u16 = 0x000C;
1241pub const IMAGE_REL_SH3_SIZEOF_SECTION: u16 = 0x000D;
1243pub const IMAGE_REL_SH3_SECTION: u16 = 0x000E;
1245pub const IMAGE_REL_SH3_SECREL: u16 = 0x000F;
1247pub const IMAGE_REL_SH3_DIRECT32_NB: u16 = 0x0010;
1249pub const IMAGE_REL_SH3_GPREL4_LONG: u16 = 0x0011;
1251pub const IMAGE_REL_SH3_TOKEN: u16 = 0x0012;
1253pub const IMAGE_REL_SHM_PCRELPT: u16 = 0x0013;
1256pub const IMAGE_REL_SHM_REFLO: u16 = 0x0014;
1258pub const IMAGE_REL_SHM_REFHALF: u16 = 0x0015;
1260pub const IMAGE_REL_SHM_RELLO: u16 = 0x0016;
1262pub const IMAGE_REL_SHM_RELHALF: u16 = 0x0017;
1264pub const IMAGE_REL_SHM_PAIR: u16 = 0x0018;
1266
1267pub const IMAGE_REL_SH_NOMODE: u16 = 0x8000;
1269
1270pub const IMAGE_REL_ARM_ABSOLUTE: u16 = 0x0000;
1272pub const IMAGE_REL_ARM_ADDR32: u16 = 0x0001;
1274pub const IMAGE_REL_ARM_ADDR32NB: u16 = 0x0002;
1276pub const IMAGE_REL_ARM_BRANCH24: u16 = 0x0003;
1278pub const IMAGE_REL_ARM_BRANCH11: u16 = 0x0004;
1280pub const IMAGE_REL_ARM_TOKEN: u16 = 0x0005;
1282pub const IMAGE_REL_ARM_GPREL12: u16 = 0x0006;
1284pub const IMAGE_REL_ARM_GPREL7: u16 = 0x0007;
1286pub const IMAGE_REL_ARM_BLX24: u16 = 0x0008;
1287pub const IMAGE_REL_ARM_BLX11: u16 = 0x0009;
1288pub const IMAGE_REL_ARM_REL32: u16 = 0x000A;
1290pub const IMAGE_REL_ARM_SECTION: u16 = 0x000E;
1292pub const IMAGE_REL_ARM_SECREL: u16 = 0x000F;
1294pub const IMAGE_REL_ARM_MOV32A: u16 = 0x0010;
1296pub const IMAGE_REL_ARM_MOV32: u16 = 0x0010;
1298pub const IMAGE_REL_ARM_MOV32T: u16 = 0x0011;
1300pub const IMAGE_REL_THUMB_MOV32: u16 = 0x0011;
1302pub const IMAGE_REL_ARM_BRANCH20T: u16 = 0x0012;
1304pub const IMAGE_REL_THUMB_BRANCH20: u16 = 0x0012;
1306pub const IMAGE_REL_ARM_BRANCH24T: u16 = 0x0014;
1308pub const IMAGE_REL_THUMB_BRANCH24: u16 = 0x0014;
1310pub const IMAGE_REL_ARM_BLX23T: u16 = 0x0015;
1312pub const IMAGE_REL_THUMB_BLX23: u16 = 0x0015;
1314
1315pub const IMAGE_REL_AM_ABSOLUTE: u16 = 0x0000;
1316pub const IMAGE_REL_AM_ADDR32: u16 = 0x0001;
1317pub const IMAGE_REL_AM_ADDR32NB: u16 = 0x0002;
1318pub const IMAGE_REL_AM_CALL32: u16 = 0x0003;
1319pub const IMAGE_REL_AM_FUNCINFO: u16 = 0x0004;
1320pub const IMAGE_REL_AM_REL32_1: u16 = 0x0005;
1321pub const IMAGE_REL_AM_REL32_2: u16 = 0x0006;
1322pub const IMAGE_REL_AM_SECREL: u16 = 0x0007;
1323pub const IMAGE_REL_AM_SECTION: u16 = 0x0008;
1324pub const IMAGE_REL_AM_TOKEN: u16 = 0x0009;
1325
1326pub const IMAGE_REL_ARM64_ABSOLUTE: u16 = 0x0000;
1332pub const IMAGE_REL_ARM64_ADDR32: u16 = 0x0001;
1334pub const IMAGE_REL_ARM64_ADDR32NB: u16 = 0x0002;
1336pub const IMAGE_REL_ARM64_BRANCH26: u16 = 0x0003;
1338pub const IMAGE_REL_ARM64_PAGEBASE_REL21: u16 = 0x0004;
1340pub const IMAGE_REL_ARM64_REL21: u16 = 0x0005;
1342pub const IMAGE_REL_ARM64_PAGEOFFSET_12A: u16 = 0x0006;
1344pub const IMAGE_REL_ARM64_PAGEOFFSET_12L: u16 = 0x0007;
1346pub const IMAGE_REL_ARM64_SECREL: u16 = 0x0008;
1348pub const IMAGE_REL_ARM64_SECREL_LOW12A: u16 = 0x0009;
1350pub const IMAGE_REL_ARM64_SECREL_HIGH12A: u16 = 0x000A;
1352pub const IMAGE_REL_ARM64_SECREL_LOW12L: u16 = 0x000B;
1354pub const IMAGE_REL_ARM64_TOKEN: u16 = 0x000C;
1355pub const IMAGE_REL_ARM64_SECTION: u16 = 0x000D;
1357pub const IMAGE_REL_ARM64_ADDR64: u16 = 0x000E;
1359pub const IMAGE_REL_ARM64_BRANCH19: u16 = 0x000F;
1361pub const IMAGE_REL_ARM64_BRANCH14: u16 = 0x0010;
1363pub const IMAGE_REL_ARM64_REL32: u16 = 0x0011;
1365
1366pub const IMAGE_REL_AMD64_ABSOLUTE: u16 = 0x0000;
1371pub const IMAGE_REL_AMD64_ADDR64: u16 = 0x0001;
1373pub const IMAGE_REL_AMD64_ADDR32: u16 = 0x0002;
1375pub const IMAGE_REL_AMD64_ADDR32NB: u16 = 0x0003;
1377pub const IMAGE_REL_AMD64_REL32: u16 = 0x0004;
1379pub const IMAGE_REL_AMD64_REL32_1: u16 = 0x0005;
1381pub const IMAGE_REL_AMD64_REL32_2: u16 = 0x0006;
1383pub const IMAGE_REL_AMD64_REL32_3: u16 = 0x0007;
1385pub const IMAGE_REL_AMD64_REL32_4: u16 = 0x0008;
1387pub const IMAGE_REL_AMD64_REL32_5: u16 = 0x0009;
1389pub const IMAGE_REL_AMD64_SECTION: u16 = 0x000A;
1391pub const IMAGE_REL_AMD64_SECREL: u16 = 0x000B;
1393pub const IMAGE_REL_AMD64_SECREL7: u16 = 0x000C;
1395pub const IMAGE_REL_AMD64_TOKEN: u16 = 0x000D;
1397pub const IMAGE_REL_AMD64_SREL32: u16 = 0x000E;
1399pub const IMAGE_REL_AMD64_PAIR: u16 = 0x000F;
1400pub const IMAGE_REL_AMD64_SSPAN32: u16 = 0x0010;
1402pub const IMAGE_REL_AMD64_EHANDLER: u16 = 0x0011;
1403pub const IMAGE_REL_AMD64_IMPORT_BR: u16 = 0x0012;
1405pub const IMAGE_REL_AMD64_IMPORT_CALL: u16 = 0x0013;
1407pub const IMAGE_REL_AMD64_CFG_BR: u16 = 0x0014;
1409pub const IMAGE_REL_AMD64_CFG_BR_REX: u16 = 0x0015;
1411pub const IMAGE_REL_AMD64_CFG_CALL: u16 = 0x0016;
1413pub const IMAGE_REL_AMD64_INDIR_BR: u16 = 0x0017;
1415pub const IMAGE_REL_AMD64_INDIR_BR_REX: u16 = 0x0018;
1417pub const IMAGE_REL_AMD64_INDIR_CALL: u16 = 0x0019;
1419pub const IMAGE_REL_AMD64_INDIR_BR_SWITCHTABLE_FIRST: u16 = 0x0020;
1421pub const IMAGE_REL_AMD64_INDIR_BR_SWITCHTABLE_LAST: u16 = 0x002F;
1423
1424pub const IMAGE_REL_IA64_ABSOLUTE: u16 = 0x0000;
1428pub const IMAGE_REL_IA64_IMM14: u16 = 0x0001;
1429pub const IMAGE_REL_IA64_IMM22: u16 = 0x0002;
1430pub const IMAGE_REL_IA64_IMM64: u16 = 0x0003;
1431pub const IMAGE_REL_IA64_DIR32: u16 = 0x0004;
1432pub const IMAGE_REL_IA64_DIR64: u16 = 0x0005;
1433pub const IMAGE_REL_IA64_PCREL21B: u16 = 0x0006;
1434pub const IMAGE_REL_IA64_PCREL21M: u16 = 0x0007;
1435pub const IMAGE_REL_IA64_PCREL21F: u16 = 0x0008;
1436pub const IMAGE_REL_IA64_GPREL22: u16 = 0x0009;
1437pub const IMAGE_REL_IA64_LTOFF22: u16 = 0x000A;
1438pub const IMAGE_REL_IA64_SECTION: u16 = 0x000B;
1439pub const IMAGE_REL_IA64_SECREL22: u16 = 0x000C;
1440pub const IMAGE_REL_IA64_SECREL64I: u16 = 0x000D;
1441pub const IMAGE_REL_IA64_SECREL32: u16 = 0x000E;
1442pub const IMAGE_REL_IA64_DIR32NB: u16 = 0x0010;
1444pub const IMAGE_REL_IA64_SREL14: u16 = 0x0011;
1445pub const IMAGE_REL_IA64_SREL22: u16 = 0x0012;
1446pub const IMAGE_REL_IA64_SREL32: u16 = 0x0013;
1447pub const IMAGE_REL_IA64_UREL32: u16 = 0x0014;
1448pub const IMAGE_REL_IA64_PCREL60X: u16 = 0x0015;
1450pub const IMAGE_REL_IA64_PCREL60B: u16 = 0x0016;
1452pub const IMAGE_REL_IA64_PCREL60F: u16 = 0x0017;
1454pub const IMAGE_REL_IA64_PCREL60I: u16 = 0x0018;
1456pub const IMAGE_REL_IA64_PCREL60M: u16 = 0x0019;
1458pub const IMAGE_REL_IA64_IMMGPREL64: u16 = 0x001A;
1459pub const IMAGE_REL_IA64_TOKEN: u16 = 0x001B;
1461pub const IMAGE_REL_IA64_GPREL32: u16 = 0x001C;
1462pub const IMAGE_REL_IA64_ADDEND: u16 = 0x001F;
1463
1464pub const IMAGE_REL_CEF_ABSOLUTE: u16 = 0x0000;
1469pub const IMAGE_REL_CEF_ADDR32: u16 = 0x0001;
1471pub const IMAGE_REL_CEF_ADDR64: u16 = 0x0002;
1473pub const IMAGE_REL_CEF_ADDR32NB: u16 = 0x0003;
1475pub const IMAGE_REL_CEF_SECTION: u16 = 0x0004;
1477pub const IMAGE_REL_CEF_SECREL: u16 = 0x0005;
1479pub const IMAGE_REL_CEF_TOKEN: u16 = 0x0006;
1481
1482pub const IMAGE_REL_CEE_ABSOLUTE: u16 = 0x0000;
1487pub const IMAGE_REL_CEE_ADDR32: u16 = 0x0001;
1489pub const IMAGE_REL_CEE_ADDR64: u16 = 0x0002;
1491pub const IMAGE_REL_CEE_ADDR32NB: u16 = 0x0003;
1493pub const IMAGE_REL_CEE_SECTION: u16 = 0x0004;
1495pub const IMAGE_REL_CEE_SECREL: u16 = 0x0005;
1497pub const IMAGE_REL_CEE_TOKEN: u16 = 0x0006;
1499
1500pub const IMAGE_REL_M32R_ABSOLUTE: u16 = 0x0000;
1502pub const IMAGE_REL_M32R_ADDR32: u16 = 0x0001;
1504pub const IMAGE_REL_M32R_ADDR32NB: u16 = 0x0002;
1506pub const IMAGE_REL_M32R_ADDR24: u16 = 0x0003;
1508pub const IMAGE_REL_M32R_GPREL16: u16 = 0x0004;
1510pub const IMAGE_REL_M32R_PCREL24: u16 = 0x0005;
1512pub const IMAGE_REL_M32R_PCREL16: u16 = 0x0006;
1514pub const IMAGE_REL_M32R_PCREL8: u16 = 0x0007;
1516pub const IMAGE_REL_M32R_REFHALF: u16 = 0x0008;
1518pub const IMAGE_REL_M32R_REFHI: u16 = 0x0009;
1520pub const IMAGE_REL_M32R_REFLO: u16 = 0x000A;
1522pub const IMAGE_REL_M32R_PAIR: u16 = 0x000B;
1524pub const IMAGE_REL_M32R_SECTION: u16 = 0x000C;
1526pub const IMAGE_REL_M32R_SECREL32: u16 = 0x000D;
1528pub const IMAGE_REL_M32R_TOKEN: u16 = 0x000E;
1530
1531pub const IMAGE_REL_EBC_ABSOLUTE: u16 = 0x0000;
1533pub const IMAGE_REL_EBC_ADDR32NB: u16 = 0x0001;
1535pub const IMAGE_REL_EBC_REL32: u16 = 0x0002;
1537pub const IMAGE_REL_EBC_SECTION: u16 = 0x0003;
1539pub const IMAGE_REL_EBC_SECREL: u16 = 0x0004;
1541
1542pub const EMARCH_ENC_I17_IMM7B_INST_WORD_X: u16 = 3;
1554pub const EMARCH_ENC_I17_IMM7B_SIZE_X: u16 = 7;
1556pub const EMARCH_ENC_I17_IMM7B_INST_WORD_POS_X: u16 = 4;
1558pub const EMARCH_ENC_I17_IMM7B_VAL_POS_X: u16 = 0;
1560
1561pub const EMARCH_ENC_I17_IMM9D_INST_WORD_X: u16 = 3;
1563pub const EMARCH_ENC_I17_IMM9D_SIZE_X: u16 = 9;
1565pub const EMARCH_ENC_I17_IMM9D_INST_WORD_POS_X: u16 = 18;
1567pub const EMARCH_ENC_I17_IMM9D_VAL_POS_X: u16 = 7;
1569
1570pub const EMARCH_ENC_I17_IMM5C_INST_WORD_X: u16 = 3;
1572pub const EMARCH_ENC_I17_IMM5C_SIZE_X: u16 = 5;
1574pub const EMARCH_ENC_I17_IMM5C_INST_WORD_POS_X: u16 = 13;
1576pub const EMARCH_ENC_I17_IMM5C_VAL_POS_X: u16 = 16;
1578
1579pub const EMARCH_ENC_I17_IC_INST_WORD_X: u16 = 3;
1581pub const EMARCH_ENC_I17_IC_SIZE_X: u16 = 1;
1583pub const EMARCH_ENC_I17_IC_INST_WORD_POS_X: u16 = 12;
1585pub const EMARCH_ENC_I17_IC_VAL_POS_X: u16 = 21;
1587
1588pub const EMARCH_ENC_I17_IMM41A_INST_WORD_X: u16 = 1;
1590pub const EMARCH_ENC_I17_IMM41A_SIZE_X: u16 = 10;
1592pub const EMARCH_ENC_I17_IMM41A_INST_WORD_POS_X: u16 = 14;
1594pub const EMARCH_ENC_I17_IMM41A_VAL_POS_X: u16 = 22;
1596
1597pub const EMARCH_ENC_I17_IMM41B_INST_WORD_X: u16 = 1;
1599pub const EMARCH_ENC_I17_IMM41B_SIZE_X: u16 = 8;
1601pub const EMARCH_ENC_I17_IMM41B_INST_WORD_POS_X: u16 = 24;
1603pub const EMARCH_ENC_I17_IMM41B_VAL_POS_X: u16 = 32;
1605
1606pub const EMARCH_ENC_I17_IMM41C_INST_WORD_X: u16 = 2;
1608pub const EMARCH_ENC_I17_IMM41C_SIZE_X: u16 = 23;
1610pub const EMARCH_ENC_I17_IMM41C_INST_WORD_POS_X: u16 = 0;
1612pub const EMARCH_ENC_I17_IMM41C_VAL_POS_X: u16 = 40;
1614
1615pub const EMARCH_ENC_I17_SIGN_INST_WORD_X: u16 = 3;
1617pub const EMARCH_ENC_I17_SIGN_SIZE_X: u16 = 1;
1619pub const EMARCH_ENC_I17_SIGN_INST_WORD_POS_X: u16 = 27;
1621pub const EMARCH_ENC_I17_SIGN_VAL_POS_X: u16 = 63;
1623
1624pub const X3_OPCODE_INST_WORD_X: u16 = 3;
1626pub const X3_OPCODE_SIZE_X: u16 = 4;
1628pub const X3_OPCODE_INST_WORD_POS_X: u16 = 28;
1630pub const X3_OPCODE_SIGN_VAL_POS_X: u16 = 0;
1632
1633pub const X3_I_INST_WORD_X: u16 = 3;
1635pub const X3_I_SIZE_X: u16 = 1;
1637pub const X3_I_INST_WORD_POS_X: u16 = 27;
1639pub const X3_I_SIGN_VAL_POS_X: u16 = 59;
1641
1642pub const X3_D_WH_INST_WORD_X: u16 = 3;
1644pub const X3_D_WH_SIZE_X: u16 = 3;
1646pub const X3_D_WH_INST_WORD_POS_X: u16 = 24;
1648pub const X3_D_WH_SIGN_VAL_POS_X: u16 = 0;
1650
1651pub const X3_IMM20_INST_WORD_X: u16 = 3;
1653pub const X3_IMM20_SIZE_X: u16 = 20;
1655pub const X3_IMM20_INST_WORD_POS_X: u16 = 4;
1657pub const X3_IMM20_SIGN_VAL_POS_X: u16 = 0;
1659
1660pub const X3_IMM39_1_INST_WORD_X: u16 = 2;
1662pub const X3_IMM39_1_SIZE_X: u16 = 23;
1664pub const X3_IMM39_1_INST_WORD_POS_X: u16 = 0;
1666pub const X3_IMM39_1_SIGN_VAL_POS_X: u16 = 36;
1668
1669pub const X3_IMM39_2_INST_WORD_X: u16 = 1;
1671pub const X3_IMM39_2_SIZE_X: u16 = 16;
1673pub const X3_IMM39_2_INST_WORD_POS_X: u16 = 16;
1675pub const X3_IMM39_2_SIGN_VAL_POS_X: u16 = 20;
1677
1678pub const X3_P_INST_WORD_X: u16 = 3;
1680pub const X3_P_SIZE_X: u16 = 4;
1682pub const X3_P_INST_WORD_POS_X: u16 = 0;
1684pub const X3_P_SIGN_VAL_POS_X: u16 = 0;
1686
1687pub const X3_TMPLT_INST_WORD_X: u16 = 0;
1689pub const X3_TMPLT_SIZE_X: u16 = 4;
1691pub const X3_TMPLT_INST_WORD_POS_X: u16 = 0;
1693pub const X3_TMPLT_SIGN_VAL_POS_X: u16 = 0;
1695
1696pub const X3_BTYPE_QP_INST_WORD_X: u16 = 2;
1698pub const X3_BTYPE_QP_SIZE_X: u16 = 9;
1700pub const X3_BTYPE_QP_INST_WORD_POS_X: u16 = 23;
1702pub const X3_BTYPE_QP_INST_VAL_POS_X: u16 = 0;
1704
1705pub const X3_EMPTY_INST_WORD_X: u16 = 1;
1707pub const X3_EMPTY_SIZE_X: u16 = 2;
1709pub const X3_EMPTY_INST_WORD_POS_X: u16 = 14;
1711pub const X3_EMPTY_INST_VAL_POS_X: u16 = 0;
1713
1714#[derive(Debug, Clone, Copy)]
1720#[repr(C)]
1721pub struct ImageLinenumber {
1722 pub symbol_table_index_or_virtual_address: U32Bytes<LE>,
1725 pub linenumber: U16Bytes<LE>,
1727}
1728
1729#[derive(Debug, Clone, Copy)]
1734#[repr(C)]
1735pub struct ImageBaseRelocation {
1736 pub virtual_address: U32<LE>,
1737 pub size_of_block: U32<LE>,
1738 }
1740
1741pub const IMAGE_REL_BASED_ABSOLUTE: u16 = 0;
1746pub const IMAGE_REL_BASED_HIGH: u16 = 1;
1747pub const IMAGE_REL_BASED_LOW: u16 = 2;
1748pub const IMAGE_REL_BASED_HIGHLOW: u16 = 3;
1749pub const IMAGE_REL_BASED_HIGHADJ: u16 = 4;
1750pub const IMAGE_REL_BASED_MACHINE_SPECIFIC_5: u16 = 5;
1751pub const IMAGE_REL_BASED_RESERVED: u16 = 6;
1752pub const IMAGE_REL_BASED_MACHINE_SPECIFIC_7: u16 = 7;
1753pub const IMAGE_REL_BASED_MACHINE_SPECIFIC_8: u16 = 8;
1754pub const IMAGE_REL_BASED_MACHINE_SPECIFIC_9: u16 = 9;
1755pub const IMAGE_REL_BASED_DIR64: u16 = 10;
1756
1757pub const IMAGE_REL_BASED_IA64_IMM64: u16 = 9;
1762
1763pub const IMAGE_REL_BASED_MIPS_JMPADDR: u16 = 5;
1764pub const IMAGE_REL_BASED_MIPS_JMPADDR16: u16 = 9;
1765
1766pub const IMAGE_REL_BASED_ARM_MOV32: u16 = 5;
1767pub const IMAGE_REL_BASED_THUMB_MOV32: u16 = 7;
1768
1769pub const IMAGE_REL_BASED_RISCV_HIGH20: u16 = 5;
1770pub const IMAGE_REL_BASED_RISCV_LOW12I: u16 = 7;
1771pub const IMAGE_REL_BASED_RISCV_LOW12S: u16 = 8;
1772
1773pub const IMAGE_ARCHIVE_START_SIZE: usize = 8;
1778pub const IMAGE_ARCHIVE_START: &[u8; 8] = b"!<arch>\n";
1779pub const IMAGE_ARCHIVE_END: &[u8] = b"`\n";
1780pub const IMAGE_ARCHIVE_PAD: &[u8] = b"\n";
1781pub const IMAGE_ARCHIVE_LINKER_MEMBER: &[u8; 16] = b"/ ";
1782pub const IMAGE_ARCHIVE_LONGNAMES_MEMBER: &[u8; 16] = b"// ";
1783pub const IMAGE_ARCHIVE_HYBRIDMAP_MEMBER: &[u8; 16] = b"/<HYBRIDMAP>/ ";
1784
1785#[derive(Debug, Clone, Copy)]
1786#[repr(C)]
1787pub struct ImageArchiveMemberHeader {
1788 pub name: [u8; 16],
1790 pub date: [u8; 12],
1792 pub user_id: [u8; 6],
1794 pub group_id: [u8; 6],
1796 pub mode: [u8; 8],
1798 pub size: [u8; 10],
1800 pub end_header: [u8; 2],
1802}
1803
1804pub const IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR: u16 = 60;
1805
1806#[derive(Debug, Clone, Copy)]
1815#[repr(C)]
1816pub struct ImageExportDirectory {
1817 pub characteristics: U32<LE>,
1818 pub time_date_stamp: U32<LE>,
1819 pub major_version: U16<LE>,
1820 pub minor_version: U16<LE>,
1821 pub name: U32<LE>,
1822 pub base: U32<LE>,
1823 pub number_of_functions: U32<LE>,
1824 pub number_of_names: U32<LE>,
1825 pub address_of_functions: U32<LE>,
1827 pub address_of_names: U32<LE>,
1829 pub address_of_name_ordinals: U32<LE>,
1831}
1832
1833#[derive(Debug, Clone, Copy)]
1838#[repr(C)]
1839pub struct ImageImportByName {
1840 pub hint: U16<LE>,
1841 }
1843
1844#[derive(Debug, Clone, Copy)]
1845#[repr(C)]
1846pub struct ImageThunkData64(pub U64<LE>);
1847#[derive(Debug, Clone, Copy)]
1860#[repr(C)]
1861pub struct ImageThunkData32(pub U32<LE>);
1862pub const IMAGE_ORDINAL_FLAG64: u64 = 0x8000000000000000;
1876pub const IMAGE_ORDINAL_FLAG32: u32 = 0x80000000;
1877
1878#[derive(Debug, Clone, Copy)]
1891#[repr(C)]
1892pub struct ImageTlsDirectory64 {
1893 pub start_address_of_raw_data: U64<LE>,
1894 pub end_address_of_raw_data: U64<LE>,
1895 pub address_of_index: U64<LE>,
1897 pub address_of_call_backs: U64<LE>,
1899 pub size_of_zero_fill: U32<LE>,
1900 pub characteristics: U32<LE>,
1901}
1902
1903#[derive(Debug, Clone, Copy)]
1904#[repr(C)]
1905pub struct ImageTlsDirectory32 {
1906 pub start_address_of_raw_data: U32<LE>,
1907 pub end_address_of_raw_data: U32<LE>,
1908 pub address_of_index: U32<LE>,
1910 pub address_of_call_backs: U32<LE>,
1912 pub size_of_zero_fill: U32<LE>,
1913 pub characteristics: U32<LE>,
1914}
1915
1916#[derive(Debug, Clone, Copy)]
1917#[repr(C)]
1918pub struct ImageImportDescriptor {
1919 pub original_first_thunk: U32Bytes<LE>,
1922 pub time_date_stamp: U32Bytes<LE>,
1927 pub forwarder_chain: U32Bytes<LE>,
1929 pub name: U32Bytes<LE>,
1930 pub first_thunk: U32Bytes<LE>,
1932}
1933
1934impl ImageImportDescriptor {
1935 pub fn is_null(&self) -> bool {
1938 self.original_first_thunk.get(LE) == 0
1939 && self.time_date_stamp.get(LE) == 0
1940 && self.forwarder_chain.get(LE) == 0
1941 && self.name.get(LE) == 0
1942 && self.first_thunk.get(LE) == 0
1943 }
1944}
1945
1946#[derive(Debug, Clone, Copy)]
1951#[repr(C)]
1952pub struct ImageBoundImportDescriptor {
1953 pub time_date_stamp: U32<LE>,
1954 pub offset_module_name: U16<LE>,
1955 pub number_of_module_forwarder_refs: U16<LE>,
1956 }
1958
1959#[derive(Debug, Clone, Copy)]
1960#[repr(C)]
1961pub struct ImageBoundForwarderRef {
1962 pub time_date_stamp: U32<LE>,
1963 pub offset_module_name: U16<LE>,
1964 pub reserved: U16<LE>,
1965}
1966
1967#[derive(Debug, Clone, Copy)]
1968#[repr(C)]
1969pub struct ImageDelayloadDescriptor {
1970 pub attributes: U32<LE>,
1971
1972 pub dll_name_rva: U32<LE>,
1974 pub module_handle_rva: U32<LE>,
1976 pub import_address_table_rva: U32<LE>,
1978 pub import_name_table_rva: U32<LE>,
1980 pub bound_import_address_table_rva: U32<LE>,
1982 pub unload_information_table_rva: U32<LE>,
1984 pub time_date_stamp: U32<LE>,
1986}
1987
1988impl ImageDelayloadDescriptor {
1989 pub fn is_null(&self) -> bool {
1992 self.attributes.get(LE) == 0
1993 && self.dll_name_rva.get(LE) == 0
1994 && self.module_handle_rva.get(LE) == 0
1995 && self.import_address_table_rva.get(LE) == 0
1996 && self.import_name_table_rva.get(LE) == 0
1997 && self.bound_import_address_table_rva.get(LE) == 0
1998 && self.unload_information_table_rva.get(LE) == 0
1999 && self.time_date_stamp.get(LE) == 0
2000 }
2001}
2002
2003pub const IMAGE_DELAYLOAD_RVA_BASED: u32 = 0x8000_0000;
2005
2006#[derive(Debug, Clone, Copy)]
2025#[repr(C)]
2026pub struct ImageResourceDirectory {
2027 pub characteristics: U32<LE>,
2028 pub time_date_stamp: U32<LE>,
2029 pub major_version: U16<LE>,
2030 pub minor_version: U16<LE>,
2031 pub number_of_named_entries: U16<LE>,
2032 pub number_of_id_entries: U16<LE>,
2033}
2034
2035pub const IMAGE_RESOURCE_NAME_IS_STRING: u32 = 0x8000_0000;
2036pub const IMAGE_RESOURCE_DATA_IS_DIRECTORY: u32 = 0x8000_0000;
2037#[derive(Debug, Clone, Copy)]
2053#[repr(C)]
2054pub struct ImageResourceDirectoryEntry {
2055 pub name_or_id: U32<LE>,
2056 pub offset_to_data_or_directory: U32<LE>,
2057}
2058
2059#[derive(Debug, Clone, Copy)]
2069#[repr(C)]
2070pub struct ImageResourceDirectoryString {
2071 pub length: U16<LE>,
2072 }
2074
2075#[derive(Debug, Clone, Copy)]
2076#[repr(C)]
2077pub struct ImageResourceDirStringU {
2078 pub length: U16<LE>,
2079 }
2081
2082#[derive(Debug, Clone, Copy)]
2092#[repr(C)]
2093pub struct ImageResourceDataEntry {
2094 pub offset_to_data: U32<LE>,
2096 pub size: U32<LE>,
2097 pub code_page: U32<LE>,
2098 pub reserved: U32<LE>,
2099}
2100
2101pub const RT_CURSOR: u16 = 1;
2105pub const RT_BITMAP: u16 = 2;
2107pub const RT_ICON: u16 = 3;
2109pub const RT_MENU: u16 = 4;
2111pub const RT_DIALOG: u16 = 5;
2113pub const RT_STRING: u16 = 6;
2115pub const RT_FONTDIR: u16 = 7;
2117pub const RT_FONT: u16 = 8;
2119pub const RT_ACCELERATOR: u16 = 9;
2121pub const RT_RCDATA: u16 = 10;
2123pub const RT_MESSAGETABLE: u16 = 11;
2125pub const RT_GROUP_CURSOR: u16 = 12;
2127pub const RT_GROUP_ICON: u16 = 14;
2129pub const RT_VERSION: u16 = 16;
2131pub const RT_DLGINCLUDE: u16 = 17;
2133pub const RT_PLUGPLAY: u16 = 19;
2135pub const RT_VXD: u16 = 20;
2137pub const RT_ANICURSOR: u16 = 21;
2139pub const RT_ANIICON: u16 = 22;
2141pub const RT_HTML: u16 = 23;
2143pub const RT_MANIFEST: u16 = 24;
2145
2146#[derive(Debug, Clone, Copy)]
2151#[repr(C)]
2152pub struct ImageLoadConfigCodeIntegrity {
2153 pub flags: U16<LE>,
2155 pub catalog: U16<LE>,
2157 pub catalog_offset: U32<LE>,
2158 pub reserved: U32<LE>,
2160}
2161
2162#[derive(Debug, Clone, Copy)]
2167#[repr(C)]
2168pub struct ImageDynamicRelocationTable {
2169 pub version: U32<LE>,
2170 pub size: U32<LE>,
2171 }
2173
2174#[derive(Debug, Clone, Copy)]
2179#[repr(C)]
2180pub struct ImageDynamicRelocation32 {
2181 pub symbol: U32<LE>,
2182 pub base_reloc_size: U32<LE>,
2183 }
2185
2186#[derive(Debug, Clone, Copy)]
2187#[repr(C)]
2188pub struct ImageDynamicRelocation64 {
2189 pub symbol: U64<LE>,
2190 pub base_reloc_size: U32<LE>,
2191 }
2193
2194#[derive(Debug, Clone, Copy)]
2195#[repr(C)]
2196pub struct ImageDynamicRelocation32V2 {
2197 pub header_size: U32<LE>,
2198 pub fixup_info_size: U32<LE>,
2199 pub symbol: U32<LE>,
2200 pub symbol_group: U32<LE>,
2201 pub flags: U32<LE>,
2202 }
2205
2206#[derive(Debug, Clone, Copy)]
2207#[repr(C)]
2208pub struct ImageDynamicRelocation64V2 {
2209 pub header_size: U32<LE>,
2210 pub fixup_info_size: U32<LE>,
2211 pub symbol: U64<LE>,
2212 pub symbol_group: U32<LE>,
2213 pub flags: U32<LE>,
2214 }
2217
2218pub const IMAGE_DYNAMIC_RELOCATION_GUARD_RF_PROLOGUE: u32 = 0x0000_0001;
2223pub const IMAGE_DYNAMIC_RELOCATION_GUARD_RF_EPILOGUE: u32 = 0x0000_0002;
2224pub const IMAGE_DYNAMIC_RELOCATION_GUARD_IMPORT_CONTROL_TRANSFER: u32 = 0x0000_0003;
2225pub const IMAGE_DYNAMIC_RELOCATION_GUARD_INDIR_CONTROL_TRANSFER: u32 = 0x0000_0004;
2226pub const IMAGE_DYNAMIC_RELOCATION_GUARD_SWITCHTABLE_BRANCH: u32 = 0x0000_0005;
2227
2228#[derive(Debug, Clone, Copy)]
2230#[repr(C)]
2231pub struct ImagePrologueDynamicRelocationHeader {
2232 pub prologue_byte_count: u8,
2233 }
2235
2236#[derive(Debug, Clone, Copy)]
2238#[repr(C)]
2239pub struct ImageEpilogueDynamicRelocationHeader {
2240 pub epilogue_count: U32Bytes<LE>,
2241 pub epilogue_byte_count: u8,
2242 pub branch_descriptor_element_size: u8,
2243 pub branch_descriptor_count: U16Bytes<LE>,
2244 }
2247
2248#[derive(Debug, Clone, Copy)]
2284#[repr(C)]
2285pub struct ImageLoadConfigDirectory32 {
2286 pub size: U32<LE>,
2287 pub time_date_stamp: U32<LE>,
2288 pub major_version: U16<LE>,
2289 pub minor_version: U16<LE>,
2290 pub global_flags_clear: U32<LE>,
2291 pub global_flags_set: U32<LE>,
2292 pub critical_section_default_timeout: U32<LE>,
2293 pub de_commit_free_block_threshold: U32<LE>,
2294 pub de_commit_total_free_threshold: U32<LE>,
2295 pub lock_prefix_table: U32<LE>,
2297 pub maximum_allocation_size: U32<LE>,
2298 pub virtual_memory_threshold: U32<LE>,
2299 pub process_heap_flags: U32<LE>,
2300 pub process_affinity_mask: U32<LE>,
2301 pub csd_version: U16<LE>,
2302 pub dependent_load_flags: U16<LE>,
2303 pub edit_list: U32<LE>,
2305 pub security_cookie: U32<LE>,
2307 pub sehandler_table: U32<LE>,
2309 pub sehandler_count: U32<LE>,
2310 pub guard_cf_check_function_pointer: U32<LE>,
2312 pub guard_cf_dispatch_function_pointer: U32<LE>,
2314 pub guard_cf_function_table: U32<LE>,
2316 pub guard_cf_function_count: U32<LE>,
2317 pub guard_flags: U32<LE>,
2318 pub code_integrity: ImageLoadConfigCodeIntegrity,
2319 pub guard_address_taken_iat_entry_table: U32<LE>,
2321 pub guard_address_taken_iat_entry_count: U32<LE>,
2322 pub guard_long_jump_target_table: U32<LE>,
2324 pub guard_long_jump_target_count: U32<LE>,
2325 pub dynamic_value_reloc_table: U32<LE>,
2327 pub chpe_metadata_pointer: U32<LE>,
2328 pub guard_rf_failure_routine: U32<LE>,
2330 pub guard_rf_failure_routine_function_pointer: U32<LE>,
2332 pub dynamic_value_reloc_table_offset: U32<LE>,
2333 pub dynamic_value_reloc_table_section: U16<LE>,
2334 pub reserved2: U16<LE>,
2335 pub guard_rf_verify_stack_pointer_function_pointer: U32<LE>,
2337 pub hot_patch_table_offset: U32<LE>,
2338 pub reserved3: U32<LE>,
2339 pub enclave_configuration_pointer: U32<LE>,
2341 pub volatile_metadata_pointer: U32<LE>,
2343}
2344
2345#[derive(Debug, Clone, Copy)]
2346#[repr(C)]
2347pub struct ImageLoadConfigDirectory64 {
2348 pub size: U32<LE>,
2349 pub time_date_stamp: U32<LE>,
2350 pub major_version: U16<LE>,
2351 pub minor_version: U16<LE>,
2352 pub global_flags_clear: U32<LE>,
2353 pub global_flags_set: U32<LE>,
2354 pub critical_section_default_timeout: U32<LE>,
2355 pub de_commit_free_block_threshold: U64<LE>,
2356 pub de_commit_total_free_threshold: U64<LE>,
2357 pub lock_prefix_table: U64<LE>,
2359 pub maximum_allocation_size: U64<LE>,
2360 pub virtual_memory_threshold: U64<LE>,
2361 pub process_affinity_mask: U64<LE>,
2362 pub process_heap_flags: U32<LE>,
2363 pub csd_version: U16<LE>,
2364 pub dependent_load_flags: U16<LE>,
2365 pub edit_list: U64<LE>,
2367 pub security_cookie: U64<LE>,
2369 pub sehandler_table: U64<LE>,
2371 pub sehandler_count: U64<LE>,
2372 pub guard_cf_check_function_pointer: U64<LE>,
2374 pub guard_cf_dispatch_function_pointer: U64<LE>,
2376 pub guard_cf_function_table: U64<LE>,
2378 pub guard_cf_function_count: U64<LE>,
2379 pub guard_flags: U32<LE>,
2380 pub code_integrity: ImageLoadConfigCodeIntegrity,
2381 pub guard_address_taken_iat_entry_table: U64<LE>,
2383 pub guard_address_taken_iat_entry_count: U64<LE>,
2384 pub guard_long_jump_target_table: U64<LE>,
2386 pub guard_long_jump_target_count: U64<LE>,
2387 pub dynamic_value_reloc_table: U64<LE>,
2389 pub chpe_metadata_pointer: U64<LE>,
2391 pub guard_rf_failure_routine: U64<LE>,
2393 pub guard_rf_failure_routine_function_pointer: U64<LE>,
2395 pub dynamic_value_reloc_table_offset: U32<LE>,
2396 pub dynamic_value_reloc_table_section: U16<LE>,
2397 pub reserved2: U16<LE>,
2398 pub guard_rf_verify_stack_pointer_function_pointer: U64<LE>,
2400 pub hot_patch_table_offset: U32<LE>,
2401 pub reserved3: U32<LE>,
2402 pub enclave_configuration_pointer: U64<LE>,
2404 pub volatile_metadata_pointer: U64<LE>,
2406}
2407
2408#[derive(Debug, Clone, Copy)]
2409#[repr(C)]
2410pub struct ImageHotPatchInfo {
2411 pub version: U32<LE>,
2412 pub size: U32<LE>,
2413 pub sequence_number: U32<LE>,
2414 pub base_image_list: U32<LE>,
2415 pub base_image_count: U32<LE>,
2416 pub buffer_offset: U32<LE>,
2418 pub extra_patch_size: U32<LE>,
2420}
2421
2422#[derive(Debug, Clone, Copy)]
2423#[repr(C)]
2424pub struct ImageHotPatchBase {
2425 pub sequence_number: U32<LE>,
2426 pub flags: U32<LE>,
2427 pub original_time_date_stamp: U32<LE>,
2428 pub original_check_sum: U32<LE>,
2429 pub code_integrity_info: U32<LE>,
2430 pub code_integrity_size: U32<LE>,
2431 pub patch_table: U32<LE>,
2432 pub buffer_offset: U32<LE>,
2434}
2435
2436#[derive(Debug, Clone, Copy)]
2437#[repr(C)]
2438pub struct ImageHotPatchHashes {
2439 pub sha256: [u8; 32],
2440 pub sha1: [u8; 20],
2441}
2442
2443pub const IMAGE_HOT_PATCH_BASE_OBLIGATORY: u32 = 0x0000_0001;
2444pub const IMAGE_HOT_PATCH_BASE_CAN_ROLL_BACK: u32 = 0x0000_0002;
2445
2446pub const IMAGE_HOT_PATCH_CHUNK_INVERSE: u32 = 0x8000_0000;
2447pub const IMAGE_HOT_PATCH_CHUNK_OBLIGATORY: u32 = 0x4000_0000;
2448pub const IMAGE_HOT_PATCH_CHUNK_RESERVED: u32 = 0x3FF0_3000;
2449pub const IMAGE_HOT_PATCH_CHUNK_TYPE: u32 = 0x000F_C000;
2450pub const IMAGE_HOT_PATCH_CHUNK_SOURCE_RVA: u32 = 0x0000_8000;
2451pub const IMAGE_HOT_PATCH_CHUNK_TARGET_RVA: u32 = 0x0000_4000;
2452pub const IMAGE_HOT_PATCH_CHUNK_SIZE: u32 = 0x0000_0FFF;
2453
2454pub const IMAGE_HOT_PATCH_NONE: u32 = 0x0000_0000;
2455pub const IMAGE_HOT_PATCH_FUNCTION: u32 = 0x0001_C000;
2456pub const IMAGE_HOT_PATCH_ABSOLUTE: u32 = 0x0002_C000;
2457pub const IMAGE_HOT_PATCH_REL32: u32 = 0x0003_C000;
2458pub const IMAGE_HOT_PATCH_CALL_TARGET: u32 = 0x0004_4000;
2459pub const IMAGE_HOT_PATCH_INDIRECT: u32 = 0x0005_C000;
2460pub const IMAGE_HOT_PATCH_NO_CALL_TARGET: u32 = 0x0006_4000;
2461pub const IMAGE_HOT_PATCH_DYNAMIC_VALUE: u32 = 0x0007_8000;
2462
2463pub const IMAGE_GUARD_CF_INSTRUMENTED: u32 = 0x0000_0100;
2465pub const IMAGE_GUARD_CFW_INSTRUMENTED: u32 = 0x0000_0200;
2467pub const IMAGE_GUARD_CF_FUNCTION_TABLE_PRESENT: u32 = 0x0000_0400;
2469pub const IMAGE_GUARD_SECURITY_COOKIE_UNUSED: u32 = 0x0000_0800;
2471pub const IMAGE_GUARD_PROTECT_DELAYLOAD_IAT: u32 = 0x0000_1000;
2473pub const IMAGE_GUARD_DELAYLOAD_IAT_IN_ITS_OWN_SECTION: u32 = 0x0000_2000;
2475pub const IMAGE_GUARD_CF_EXPORT_SUPPRESSION_INFO_PRESENT: u32 = 0x0000_4000;
2479pub const IMAGE_GUARD_CF_ENABLE_EXPORT_SUPPRESSION: u32 = 0x0000_8000;
2481pub const IMAGE_GUARD_CF_LONGJUMP_TABLE_PRESENT: u32 = 0x0001_0000;
2483pub const IMAGE_GUARD_RF_INSTRUMENTED: u32 = 0x0002_0000;
2485pub const IMAGE_GUARD_RF_ENABLE: u32 = 0x0004_0000;
2487pub const IMAGE_GUARD_RF_STRICT: u32 = 0x0008_0000;
2489pub const IMAGE_GUARD_RETPOLINE_PRESENT: u32 = 0x0010_0000;
2491
2492pub const IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_MASK: u32 = 0xF000_0000;
2494pub const IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_SHIFT: u32 = 28;
2496
2497pub const IMAGE_GUARD_FLAG_FID_SUPPRESSED: u16 = 0x01;
2503pub const IMAGE_GUARD_FLAG_EXPORT_SUPPRESSED: u16 = 0x02;
2505
2506#[derive(Debug, Clone, Copy)]
2529#[repr(C)]
2530pub struct ImageArmRuntimeFunctionEntry {
2531 pub begin_address: U32<LE>,
2532 pub unwind_data: U32<LE>,
2533}
2534
2535#[derive(Debug, Clone, Copy)]
2536#[repr(C)]
2537pub struct ImageArm64RuntimeFunctionEntry {
2538 pub begin_address: U32<LE>,
2539 pub unwind_data: U32<LE>,
2540}
2541
2542#[derive(Debug, Clone, Copy)]
2543#[repr(C)]
2544pub struct ImageAlpha64RuntimeFunctionEntry {
2545 pub begin_address: U64<LE>,
2546 pub end_address: U64<LE>,
2547 pub exception_handler: U64<LE>,
2548 pub handler_data: U64<LE>,
2549 pub prolog_end_address: U64<LE>,
2550}
2551
2552#[derive(Debug, Clone, Copy)]
2553#[repr(C)]
2554pub struct ImageAlphaRuntimeFunctionEntry {
2555 pub begin_address: U32<LE>,
2556 pub end_address: U32<LE>,
2557 pub exception_handler: U32<LE>,
2558 pub handler_data: U32<LE>,
2559 pub prolog_end_address: U32<LE>,
2560}
2561
2562#[derive(Debug, Clone, Copy)]
2563#[repr(C)]
2564pub struct ImageRuntimeFunctionEntry {
2565 pub begin_address: U32<LE>,
2566 pub end_address: U32<LE>,
2567 pub unwind_info_address_or_data: U32<LE>,
2568}
2569
2570pub const IMAGE_ENCLAVE_LONG_ID_LENGTH: usize = 32;
2575pub const IMAGE_ENCLAVE_SHORT_ID_LENGTH: usize = 16;
2576
2577#[derive(Debug, Clone, Copy)]
2578#[repr(C)]
2579pub struct ImageEnclaveConfig32 {
2580 pub size: U32<LE>,
2581 pub minimum_required_config_size: U32<LE>,
2582 pub policy_flags: U32<LE>,
2583 pub number_of_imports: U32<LE>,
2584 pub import_list: U32<LE>,
2585 pub import_entry_size: U32<LE>,
2586 pub family_id: [u8; IMAGE_ENCLAVE_SHORT_ID_LENGTH],
2587 pub image_id: [u8; IMAGE_ENCLAVE_SHORT_ID_LENGTH],
2588 pub image_version: U32<LE>,
2589 pub security_version: U32<LE>,
2590 pub enclave_size: U32<LE>,
2591 pub number_of_threads: U32<LE>,
2592 pub enclave_flags: U32<LE>,
2593}
2594
2595#[derive(Debug, Clone, Copy)]
2596#[repr(C)]
2597pub struct ImageEnclaveConfig64 {
2598 pub size: U32<LE>,
2599 pub minimum_required_config_size: U32<LE>,
2600 pub policy_flags: U32<LE>,
2601 pub number_of_imports: U32<LE>,
2602 pub import_list: U32<LE>,
2603 pub import_entry_size: U32<LE>,
2604 pub family_id: [u8; IMAGE_ENCLAVE_SHORT_ID_LENGTH],
2605 pub image_id: [u8; IMAGE_ENCLAVE_SHORT_ID_LENGTH],
2606 pub image_version: U32<LE>,
2607 pub security_version: U32<LE>,
2608 pub enclave_size: U64<LE>,
2609 pub number_of_threads: U32<LE>,
2610 pub enclave_flags: U32<LE>,
2611}
2612
2613pub const IMAGE_ENCLAVE_POLICY_DEBUGGABLE: u32 = 0x0000_0001;
2616
2617pub const IMAGE_ENCLAVE_FLAG_PRIMARY_IMAGE: u32 = 0x0000_0001;
2618
2619#[derive(Debug, Clone, Copy)]
2620#[repr(C)]
2621pub struct ImageEnclaveImport {
2622 pub match_type: U32<LE>,
2623 pub minimum_security_version: U32<LE>,
2624 pub unique_or_author_id: [u8; IMAGE_ENCLAVE_LONG_ID_LENGTH],
2625 pub family_id: [u8; IMAGE_ENCLAVE_SHORT_ID_LENGTH],
2626 pub image_id: [u8; IMAGE_ENCLAVE_SHORT_ID_LENGTH],
2627 pub import_name: U32<LE>,
2628 pub reserved: U32<LE>,
2629}
2630
2631pub const IMAGE_ENCLAVE_IMPORT_MATCH_NONE: u32 = 0x0000_0000;
2632pub const IMAGE_ENCLAVE_IMPORT_MATCH_UNIQUE_ID: u32 = 0x0000_0001;
2633pub const IMAGE_ENCLAVE_IMPORT_MATCH_AUTHOR_ID: u32 = 0x0000_0002;
2634pub const IMAGE_ENCLAVE_IMPORT_MATCH_FAMILY_ID: u32 = 0x0000_0003;
2635pub const IMAGE_ENCLAVE_IMPORT_MATCH_IMAGE_ID: u32 = 0x0000_0004;
2636
2637#[derive(Debug, Clone, Copy)]
2642#[repr(C)]
2643pub struct ImageDebugDirectory {
2644 pub characteristics: U32<LE>,
2645 pub time_date_stamp: U32<LE>,
2646 pub major_version: U16<LE>,
2647 pub minor_version: U16<LE>,
2648 pub typ: U32<LE>,
2649 pub size_of_data: U32<LE>,
2650 pub address_of_raw_data: U32<LE>,
2651 pub pointer_to_raw_data: U32<LE>,
2652}
2653
2654pub const IMAGE_DEBUG_TYPE_UNKNOWN: u32 = 0;
2655pub const IMAGE_DEBUG_TYPE_COFF: u32 = 1;
2656pub const IMAGE_DEBUG_TYPE_CODEVIEW: u32 = 2;
2657pub const IMAGE_DEBUG_TYPE_FPO: u32 = 3;
2658pub const IMAGE_DEBUG_TYPE_MISC: u32 = 4;
2659pub const IMAGE_DEBUG_TYPE_EXCEPTION: u32 = 5;
2660pub const IMAGE_DEBUG_TYPE_FIXUP: u32 = 6;
2661pub const IMAGE_DEBUG_TYPE_OMAP_TO_SRC: u32 = 7;
2662pub const IMAGE_DEBUG_TYPE_OMAP_FROM_SRC: u32 = 8;
2663pub const IMAGE_DEBUG_TYPE_BORLAND: u32 = 9;
2664pub const IMAGE_DEBUG_TYPE_RESERVED10: u32 = 10;
2665pub const IMAGE_DEBUG_TYPE_CLSID: u32 = 11;
2666pub const IMAGE_DEBUG_TYPE_VC_FEATURE: u32 = 12;
2667pub const IMAGE_DEBUG_TYPE_POGO: u32 = 13;
2668pub const IMAGE_DEBUG_TYPE_ILTCG: u32 = 14;
2669pub const IMAGE_DEBUG_TYPE_MPX: u32 = 15;
2670pub const IMAGE_DEBUG_TYPE_REPRO: u32 = 16;
2671
2672#[derive(Debug, Clone, Copy)]
2673#[repr(C)]
2674pub struct ImageCoffSymbolsHeader {
2675 pub number_of_symbols: U32<LE>,
2676 pub lva_to_first_symbol: U32<LE>,
2677 pub number_of_linenumbers: U32<LE>,
2678 pub lva_to_first_linenumber: U32<LE>,
2679 pub rva_to_first_byte_of_code: U32<LE>,
2680 pub rva_to_last_byte_of_code: U32<LE>,
2681 pub rva_to_first_byte_of_data: U32<LE>,
2682 pub rva_to_last_byte_of_data: U32<LE>,
2683}
2684
2685pub const FRAME_FPO: u16 = 0;
2686pub const FRAME_TRAP: u16 = 1;
2687pub const FRAME_TSS: u16 = 2;
2688pub const FRAME_NONFPO: u16 = 3;
2689
2690pub const IMAGE_DEBUG_MISC_EXENAME: u16 = 1;
2720
2721#[derive(Debug, Clone, Copy)]
2722#[repr(C)]
2723pub struct ImageDebugMisc {
2724 pub data_type: U32<LE>,
2726 pub length: U32<LE>,
2728 pub unicode: u8,
2730 pub reserved: [u8; 3],
2731 }
2734
2735#[derive(Debug, Clone, Copy)]
2742#[repr(C)]
2743pub struct ImageFunctionEntry {
2744 pub starting_address: U32<LE>,
2745 pub ending_address: U32<LE>,
2746 pub end_of_prologue: U32<LE>,
2747}
2748
2749#[derive(Debug, Clone, Copy)]
2750#[repr(C)]
2751pub struct ImageFunctionEntry64 {
2752 pub starting_address: U64<LE>,
2753 pub ending_address: U64<LE>,
2754 pub end_of_prologue_or_unwind_info_address: U64<LE>,
2755}
2756
2757#[derive(Debug, Clone, Copy)]
2778#[repr(C)]
2779pub struct ImageSeparateDebugHeader {
2780 pub signature: U16<LE>,
2781 pub flags: U16<LE>,
2782 pub machine: U16<LE>,
2783 pub characteristics: U16<LE>,
2784 pub time_date_stamp: U32<LE>,
2785 pub check_sum: U32<LE>,
2786 pub image_base: U32<LE>,
2787 pub size_of_image: U32<LE>,
2788 pub number_of_sections: U32<LE>,
2789 pub exported_names_size: U32<LE>,
2790 pub debug_directory_size: U32<LE>,
2791 pub section_alignment: U32<LE>,
2792 pub reserved: [U32<LE>; 2],
2793}
2794
2795#[derive(Debug, Clone, Copy)]
2796#[repr(C)]
2797pub struct NonPagedDebugInfo {
2798 pub signature: U16<LE>,
2799 pub flags: U16<LE>,
2800 pub size: U32<LE>,
2801 pub machine: U16<LE>,
2802 pub characteristics: U16<LE>,
2803 pub time_date_stamp: U32<LE>,
2804 pub check_sum: U32<LE>,
2805 pub size_of_image: U32<LE>,
2806 pub image_base: U64<LE>,
2807 }
2810
2811pub const IMAGE_SEPARATE_DEBUG_SIGNATURE: u16 = 0x4944;
2812pub const NON_PAGED_DEBUG_SIGNATURE: u16 = 0x494E;
2813
2814pub const IMAGE_SEPARATE_DEBUG_FLAGS_MASK: u16 = 0x8000;
2815pub const IMAGE_SEPARATE_DEBUG_MISMATCH: u16 = 0x8000;
2817
2818#[derive(Debug, Clone, Copy)]
2846#[repr(C)]
2847pub struct ImageArchitectureEntry {
2848 pub fixup_inst_rva: U32<LE>,
2850 pub new_inst: U32<LE>,
2852}
2853
2854pub const IMPORT_OBJECT_HDR_SIG2: u16 = 0xffff;
2860
2861#[derive(Debug, Clone, Copy)]
2862#[repr(C)]
2863pub struct ImportObjectHeader {
2864 pub sig1: U16<LE>,
2866 pub sig2: U16<LE>,
2868 pub version: U16<LE>,
2869 pub machine: U16<LE>,
2870 pub time_date_stamp: U32<LE>,
2872 pub size_of_data: U32<LE>,
2874
2875 pub ordinal_or_hint: U16<LE>,
2877
2878 pub name_type: U16<LE>,
2882}
2883
2884pub const IMPORT_OBJECT_TYPE_MASK: u16 = 0b11;
2885pub const IMPORT_OBJECT_TYPE_SHIFT: u16 = 0;
2886pub const IMPORT_OBJECT_CODE: u16 = 0;
2887pub const IMPORT_OBJECT_DATA: u16 = 1;
2888pub const IMPORT_OBJECT_CONST: u16 = 2;
2889
2890pub const IMPORT_OBJECT_NAME_MASK: u16 = 0b111;
2891pub const IMPORT_OBJECT_NAME_SHIFT: u16 = 2;
2892pub const IMPORT_OBJECT_ORDINAL: u16 = 0;
2894pub const IMPORT_OBJECT_NAME: u16 = 1;
2896pub const IMPORT_OBJECT_NAME_NO_PREFIX: u16 = 2;
2898pub const IMPORT_OBJECT_NAME_UNDECORATE: u16 = 3;
2900pub const IMPORT_OBJECT_NAME_EXPORTAS: u16 = 4;
2902
2903pub const COMIMAGE_FLAGS_ILONLY: u32 = 0x0000_0001;
2905pub const COMIMAGE_FLAGS_32BITREQUIRED: u32 = 0x0000_0002;
2906pub const COMIMAGE_FLAGS_IL_LIBRARY: u32 = 0x0000_0004;
2907pub const COMIMAGE_FLAGS_STRONGNAMESIGNED: u32 = 0x0000_0008;
2908pub const COMIMAGE_FLAGS_NATIVE_ENTRYPOINT: u32 = 0x0000_0010;
2909pub const COMIMAGE_FLAGS_TRACKDEBUGDATA: u32 = 0x0001_0000;
2910pub const COMIMAGE_FLAGS_32BITPREFERRED: u32 = 0x0002_0000;
2911
2912pub const COR_VERSION_MAJOR_V2: u16 = 2;
2914pub const COR_VERSION_MAJOR: u16 = COR_VERSION_MAJOR_V2;
2915pub const COR_VERSION_MINOR: u16 = 5;
2916pub const COR_DELETED_NAME_LENGTH: usize = 8;
2917pub const COR_VTABLEGAP_NAME_LENGTH: usize = 8;
2918
2919pub const NATIVE_TYPE_MAX_CB: u16 = 1;
2921pub const COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE: u16 = 0xFF;
2922
2923pub const IMAGE_COR_MIH_METHODRVA: u16 = 0x01;
2925pub const IMAGE_COR_MIH_EHRVA: u16 = 0x02;
2926pub const IMAGE_COR_MIH_BASICBLOCK: u16 = 0x08;
2927
2928pub const COR_VTABLE_32BIT: u16 = 0x01;
2931pub const COR_VTABLE_64BIT: u16 = 0x02;
2933pub const COR_VTABLE_FROM_UNMANAGED: u16 = 0x04;
2935pub const COR_VTABLE_FROM_UNMANAGED_RETAIN_APPDOMAIN: u16 = 0x08;
2937pub const COR_VTABLE_CALL_MOST_DERIVED: u16 = 0x10;
2939
2940pub const IMAGE_COR_EATJ_THUNK_SIZE: usize = 32;
2943
2944pub const MAX_CLASS_NAME: usize = 1024;
2946pub const MAX_PACKAGE_NAME: usize = 1024;
2947
2948#[derive(Debug, Clone, Copy)]
2950#[repr(C)]
2951pub struct ImageCor20Header {
2952 pub cb: U32<LE>,
2954 pub major_runtime_version: U16<LE>,
2955 pub minor_runtime_version: U16<LE>,
2956
2957 pub meta_data: ImageDataDirectory,
2959 pub flags: U32<LE>,
2960
2961 pub entry_point_token_or_rva: U32<LE>,
2964
2965 pub resources: ImageDataDirectory,
2967 pub strong_name_signature: ImageDataDirectory,
2968
2969 pub code_manager_table: ImageDataDirectory,
2971 pub vtable_fixups: ImageDataDirectory,
2972 pub export_address_table_jumps: ImageDataDirectory,
2973
2974 pub managed_native_header: ImageDataDirectory,
2976}
2977
2978unsafe_impl_pod!(
2979 ImageDosHeader,
2980 ImageOs2Header,
2981 ImageVxdHeader,
2982 ImageFileHeader,
2983 ImageDataDirectory,
2984 ImageOptionalHeader32,
2985 ImageRomOptionalHeader,
2986 ImageOptionalHeader64,
2987 ImageNtHeaders64,
2988 ImageNtHeaders32,
2989 ImageRomHeaders,
2990 Guid,
2991 AnonObjectHeader,
2992 AnonObjectHeaderV2,
2993 AnonObjectHeaderBigobj,
2994 ImageSectionHeader,
2995 ImageSymbol,
2996 ImageSymbolBytes,
2997 ImageSymbolEx,
2998 ImageSymbolExBytes,
2999 ImageAuxSymbolTokenDef,
3000 ImageAuxSymbolFunction,
3001 ImageAuxSymbolFunctionBeginEnd,
3002 ImageAuxSymbolWeak,
3003 ImageAuxSymbolSection,
3004 ImageAuxSymbolCrc,
3005 ImageRelocation,
3006 ImageLinenumber,
3007 ImageBaseRelocation,
3008 ImageArchiveMemberHeader,
3009 ImageExportDirectory,
3010 ImageImportByName,
3011 ImageThunkData64,
3012 ImageThunkData32,
3013 ImageTlsDirectory64,
3014 ImageTlsDirectory32,
3015 ImageImportDescriptor,
3016 ImageBoundImportDescriptor,
3017 ImageBoundForwarderRef,
3018 ImageDelayloadDescriptor,
3019 ImageResourceDirectory,
3020 ImageResourceDirectoryEntry,
3021 ImageResourceDirectoryString,
3022 ImageResourceDirStringU,
3023 ImageResourceDataEntry,
3024 ImageLoadConfigCodeIntegrity,
3025 ImageDynamicRelocationTable,
3026 ImageDynamicRelocation32,
3027 ImageDynamicRelocation64,
3028 ImageDynamicRelocation32V2,
3029 ImageDynamicRelocation64V2,
3030 ImagePrologueDynamicRelocationHeader,
3031 ImageEpilogueDynamicRelocationHeader,
3032 ImageLoadConfigDirectory32,
3036 ImageLoadConfigDirectory64,
3037 ImageHotPatchInfo,
3038 ImageHotPatchBase,
3039 ImageHotPatchHashes,
3040 ImageArmRuntimeFunctionEntry,
3042 ImageArm64RuntimeFunctionEntry,
3043 ImageAlpha64RuntimeFunctionEntry,
3044 ImageAlphaRuntimeFunctionEntry,
3045 ImageRuntimeFunctionEntry,
3046 ImageEnclaveConfig32,
3047 ImageEnclaveConfig64,
3048 ImageEnclaveImport,
3049 ImageDebugDirectory,
3050 ImageCoffSymbolsHeader,
3051 ImageDebugMisc,
3053 ImageFunctionEntry,
3054 ImageFunctionEntry64,
3055 ImageSeparateDebugHeader,
3056 NonPagedDebugInfo,
3057 ImageArchitectureEntry,
3059 ImportObjectHeader,
3060 ImageCor20Header,
3061 MaskedRichHeaderEntry,
3062);