aboutsummaryrefslogtreecommitdiff
path: root/include/coff
diff options
context:
space:
mode:
Diffstat (limited to 'include/coff')
-rw-r--r--include/coff/i386.h19
-rw-r--r--include/coff/x86_64.h22
2 files changed, 40 insertions, 1 deletions
diff --git a/include/coff/i386.h b/include/coff/i386.h
index 1d2ccff..8fd2b8d 100644
--- a/include/coff/i386.h
+++ b/include/coff/i386.h
@@ -43,7 +43,26 @@
#define LYNXCOFFMAGIC 0415
+/* .NET DLLs XOR the Machine number (above) with an override to
+ indicate that the DLL contains OS-specific machine code rather
+ than just IL or bytecode. See
+ https://github.com/dotnet/coreclr/blob/6f7aa7967c607b8c667518314ab937c0d7547025/src/inc/pedecoder.h#L94-L107. */
+#define IMAGE_FILE_MACHINE_NATIVE_APPLE_OVERRIDE 0x4644
+#define IMAGE_FILE_MACHINE_NATIVE_FREEBSD_OVERRIDE 0xadc4
+#define IMAGE_FILE_MACHINE_NATIVE_LINUX_OVERRIDE 0x7b79
+#define IMAGE_FILE_MACHINE_NATIVE_NETBSD_OVERRIDE 0x1993
+
+/* Used in some .NET DLLs that target a specific OS. */
+#define I386_APPLE_MAGIC (I386MAGIC ^ IMAGE_FILE_MACHINE_NATIVE_APPLE_OVERRIDE)
+#define I386_FREEBSD_MAGIC (I386MAGIC ^ IMAGE_FILE_MACHINE_NATIVE_FREEBSD_OVERRIDE)
+#define I386_LINUX_MAGIC (I386MAGIC ^ IMAGE_FILE_MACHINE_NATIVE_LINUX_OVERRIDE)
+#define I386_NETBSD_MAGIC (I386MAGIC ^ IMAGE_FILE_MACHINE_NATIVE_NETBSD_OVERRIDE)
+
#define I386BADMAG(x) ( ((x).f_magic != I386MAGIC) \
+ && (x).f_magic != I386_APPLE_MAGIC \
+ && (x).f_magic != I386_FREEBSD_MAGIC \
+ && (x).f_magic != I386_LINUX_MAGIC \
+ && (x).f_magic != I386_NETBSD_MAGIC \
&& (x).f_magic != I386AIXMAGIC \
&& (x).f_magic != I386PTXMAGIC \
&& (x).f_magic != LYNXCOFFMAGIC)
diff --git a/include/coff/x86_64.h b/include/coff/x86_64.h
index 3d0e6f0..c0e6de3 100644
--- a/include/coff/x86_64.h
+++ b/include/coff/x86_64.h
@@ -29,7 +29,27 @@
#define AMD64MAGIC 0x8664
-#define AMD64BADMAG(x) ((x).f_magic != AMD64MAGIC)
+/* .NET DLLs XOR the Machine number (above) with an override to
+ indicate that the DLL contains OS-specific machine code rather
+ than just IL or bytecode. See
+ https://github.com/dotnet/coreclr/blob/6f7aa7967c607b8c667518314ab937c0d7547025/src/inc/pedecoder.h#L94-L107. */
+#define IMAGE_FILE_MACHINE_NATIVE_APPLE_OVERRIDE 0x4644
+#define IMAGE_FILE_MACHINE_NATIVE_FREEBSD_OVERRIDE 0xadc4
+#define IMAGE_FILE_MACHINE_NATIVE_LINUX_OVERRIDE 0x7b79
+#define IMAGE_FILE_MACHINE_NATIVE_NETBSD_OVERRIDE 0x1993
+
+/* Used in some .NET DLLs that target a specific OS. */
+#define AMD64_APPLE_MAGIC (AMD64MAGIC ^ IMAGE_FILE_MACHINE_NATIVE_APPLE_OVERRIDE)
+#define AMD64_FREEBSD_MAGIC (AMD64MAGIC ^ IMAGE_FILE_MACHINE_NATIVE_FREEBSD_OVERRIDE)
+#define AMD64_LINUX_MAGIC (AMD64MAGIC ^ IMAGE_FILE_MACHINE_NATIVE_LINUX_OVERRIDE)
+#define AMD64_NETBSD_MAGIC (AMD64MAGIC ^ IMAGE_FILE_MACHINE_NATIVE_NETBSD_OVERRIDE)
+
+#define AMD64BADMAG(x) ( ((x).f_magic != AMD64MAGIC) \
+ && ((x).f_magic != AMD64_APPLE_MAGIC) \
+ && ((x).f_magic != AMD64_FREEBSD_MAGIC) \
+ && ((x).f_magic != AMD64_LINUX_MAGIC) \
+ && ((x).f_magic != AMD64_NETBSD_MAGIC))
+
#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
#define OMAGIC 0404 /* Object files, eg as output. */