ms_coff/
machine.rs

1#[derive(Copy, Clone, Eq, PartialEq, Hash, Ord, PartialOrd)]
2#[allow(non_camel_case_types)]
3pub struct IMAGE_FILE_MACHINE(pub u16);
4
5impl IMAGE_FILE_MACHINE {
6    pub const IMAGE_FILE_MACHINE_UNKNOWN: Self = Self(0);
7    /// Useful for indicating we want to interact with the host and not a WoW guest.
8    pub const IMAGE_FILE_MACHINE_TARGET_HOST: Self = Self(0x0001);
9    /// Intel 386.
10    pub const IMAGE_FILE_MACHINE_I386: Self = Self(0x014c);
11    /// MIPS little-endian, 0x160 big-endian
12    pub const IMAGE_FILE_MACHINE_R3000: Self = Self(0x0162);
13    /// MIPS little-endian
14    pub const IMAGE_FILE_MACHINE_R4000: Self = Self(0x0166);
15    /// MIPS little-endian
16    pub const IMAGE_FILE_MACHINE_R10000: Self = Self(0x0168);
17    /// MIPS little-endian WCE v2
18    pub const IMAGE_FILE_MACHINE_WCEMIPSV2: Self = Self(0x0169);
19    /// Alpha_AXP
20    pub const IMAGE_FILE_MACHINE_ALPHA: Self = Self(0x0184);
21    /// SH3 little-endian
22    pub const IMAGE_FILE_MACHINE_SH3: Self = Self(0x01a2);
23    pub const IMAGE_FILE_MACHINE_SH3DSP: Self = Self(0x01a3);
24    /// SH3E little-endian
25    pub const IMAGE_FILE_MACHINE_SH3E: Self = Self(0x01a4);
26    /// SH4 little-endian
27    pub const IMAGE_FILE_MACHINE_SH4: Self = Self(0x01a6);
28    /// SH5
29    pub const IMAGE_FILE_MACHINE_SH5: Self = Self(0x01a8);
30    /// ARM Little-Endian
31    pub const IMAGE_FILE_MACHINE_ARM: Self = Self(0x01c0);
32    /// ARM Thumb/Thumb-2 Little-Endian
33    pub const IMAGE_FILE_MACHINE_THUMB: Self = Self(0x01c2);
34    /// ARM Thumb-2 Little-Endian
35    pub const IMAGE_FILE_MACHINE_ARMNT: Self = Self(0x01c4);
36    pub const IMAGE_FILE_MACHINE_AM33: Self = Self(0x01d3);
37    /// IBM PowerPC Little-Endian
38    pub const IMAGE_FILE_MACHINE_POWERPC: Self = Self(0x01F0);
39    pub const IMAGE_FILE_MACHINE_POWERPCFP: Self = Self(0x01f1);
40    /// Intel 64
41    pub const IMAGE_FILE_MACHINE_IA64: Self = Self(0x0200);
42    /// MIPS
43    pub const IMAGE_FILE_MACHINE_MIPS16: Self = Self(0x0266);
44    /// ALPHA64
45    pub const IMAGE_FILE_MACHINE_ALPHA64: Self = Self(0x0284);
46    /// MIPS
47    pub const IMAGE_FILE_MACHINE_MIPSFPU: Self = Self(0x0366);
48    /// MIPS
49    pub const IMAGE_FILE_MACHINE_MIPSFPU16: Self = Self(0x0466);
50    pub const IMAGE_FILE_MACHINE_AXP64: Self = Self::IMAGE_FILE_MACHINE_ALPHA64;
51    /// Infineon
52    pub const IMAGE_FILE_MACHINE_TRICORE: Self = Self(0x0520);
53    pub const IMAGE_FILE_MACHINE_CEF: Self = Self(0x0CEF);
54    /// EFI Byte Code
55    pub const IMAGE_FILE_MACHINE_EBC: Self = Self(0x0EBC);
56    /// AMD64 (K8)
57    pub const IMAGE_FILE_MACHINE_AMD64: Self = Self(0x8664);
58    /// M32R little-endian
59    pub const IMAGE_FILE_MACHINE_M32R: Self = Self(0x9041);
60    /// ARM64 Little-Endian
61    pub const IMAGE_FILE_MACHINE_ARM64: Self = Self(0xAA64);
62    pub const IMAGE_FILE_MACHINE_CEE: Self = Self(0xC0EE);
63
64    pub fn to_str_opt(self) -> Option<&'static str> {
65        Some(match self.0 {
66            0x0000 => "IMAGE_FILE_MACHINE_UNKNOWN",
67            0x0001 => "IMAGE_FILE_MACHINE_TARGET_HOST",
68            0x014c => "IMAGE_FILE_MACHINE_I386",
69            0x0162 => "IMAGE_FILE_MACHINE_R3000",
70            0x0166 => "IMAGE_FILE_MACHINE_R4000",
71            0x0168 => "IMAGE_FILE_MACHINE_R10000",
72            0x0169 => "IMAGE_FILE_MACHINE_WCEMIPSV2",
73            0x0184 => "IMAGE_FILE_MACHINE_ALPHA",
74            0x01a2 => "IMAGE_FILE_MACHINE_SH3",
75            0x01a3 => "IMAGE_FILE_MACHINE_SH3DSP",
76            0x01a4 => "IMAGE_FILE_MACHINE_SH3E",
77            0x01a6 => "IMAGE_FILE_MACHINE_SH4",
78            0x01a8 => "IMAGE_FILE_MACHINE_SH5",
79            0x01c0 => "IMAGE_FILE_MACHINE_ARM",
80            0x01c2 => "IMAGE_FILE_MACHINE_THUMB",
81            0x01c4 => "IMAGE_FILE_MACHINE_ARMNT",
82            0x01d3 => "IMAGE_FILE_MACHINE_AM33",
83            0x01F0 => "IMAGE_FILE_MACHINE_POWERPC",
84            0x01f1 => "IMAGE_FILE_MACHINE_POWERPCFP",
85            0x0200 => "IMAGE_FILE_MACHINE_IA64",
86            0x0266 => "IMAGE_FILE_MACHINE_MIPS16",
87            0x0284 => "IMAGE_FILE_MACHINE_ALPHA64",
88            0x0366 => "IMAGE_FILE_MACHINE_MIPSFPU",
89            0x0466 => "IMAGE_FILE_MACHINE_MIPSFPU16",
90            0x0520 => "IMAGE_FILE_MACHINE_TRICORE",
91            0x0CEF => "IMAGE_FILE_MACHINE_CEF",
92            0x0EBC => "IMAGE_FILE_MACHINE_EBC",
93            0x8664 => "IMAGE_FILE_MACHINE_AMD64",
94            0x9041 => "IMAGE_FILE_MACHINE_M32R",
95            0xAA64 => "IMAGE_FILE_MACHINE_ARM64",
96            0xC0EE => "IMAGE_FILE_MACHINE_CEE",
97            _ => return None,
98        })
99    }
100
101    pub fn to_str(self) -> &'static str {
102        self.to_str_opt().unwrap_or("??")
103    }
104}
105
106impl core::fmt::Debug for IMAGE_FILE_MACHINE {
107    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
108        if let Some(s) = self.to_str_opt() {
109            f.write_str(s)
110        } else {
111            write!(f, "??0x{:x}", self.0)
112        }
113    }
114}