From: Amy Date: Sun, 26 Aug 2018 03:55:56 +0000 (-0700) Subject: R2RDump - Non-Windows machine code (#19638) X-Git-Tag: accepted/tizen/unified/20190422.045933~1352 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5d2ae2fc7f97f31fa2730fadfc56b832299fd9e0;p=platform%2Fupstream%2Fcoreclr.git R2RDump - Non-Windows machine code (#19638) * Get machine architecture for non-Windows images * Update readme * Throw exception if machine is invalid, output OS * Capitalization --- diff --git a/src/tools/r2rdump/R2RReader.cs b/src/tools/r2rdump/R2RReader.cs index 549415f..d73fdc8 100644 --- a/src/tools/r2rdump/R2RReader.cs +++ b/src/tools/r2rdump/R2RReader.cs @@ -43,6 +43,19 @@ namespace R2RDump } } + /// + /// based on src/inc/pedecoder.h IMAGE_FILE_MACHINE_NATIVE_OS_OVERRIDE + /// + public enum OperatingSystem + { + Apple = 0x4644, + FreeBSD = 0xADC4, + Linux = 0x7B79, + NetBSD = 0x1993, + Windows = 0, + Unknown = -1 + } + public class R2RReader { /// @@ -76,6 +89,8 @@ namespace R2RDump /// public Machine Machine { get; set; } + public OperatingSystem OS { get; set; } + /// /// The preferred address of the first byte of image when loaded into memory; /// must be a multiple of 64K. @@ -127,11 +142,20 @@ namespace R2RDump throw new BadImageFormatException("The file is not a ReadyToRun image"); } - Machine = PEReader.PEHeaders.CoffHeader.Machine; - if (!Machine.IsDefined(typeof(Machine), Machine)) + uint machine = (uint)PEReader.PEHeaders.CoffHeader.Machine; + OS = OperatingSystem.Unknown; + foreach(OperatingSystem os in Enum.GetValues(typeof(OperatingSystem))) + { + Machine = (Machine)(machine ^ (uint)os); + if (Enum.IsDefined(typeof(Machine), Machine)) + { + OS = os; + break; + } + } + if (OS == OperatingSystem.Unknown) { - R2RDump.WriteWarning($"Invalid Machine: {Machine}"); - Machine = Machine.Amd64; + throw new BadImageFormatException($"Invalid Machine: {machine}"); } ImageBase = PEReader.PEHeaders.PEHeader.ImageBase; diff --git a/src/tools/r2rdump/TextDumper.cs b/src/tools/r2rdump/TextDumper.cs index 1406fd2..e7b249e 100644 --- a/src/tools/r2rdump/TextDumper.cs +++ b/src/tools/r2rdump/TextDumper.cs @@ -26,6 +26,7 @@ namespace R2RDump internal override void Begin() { _writer.WriteLine($"Filename: {_r2r.Filename}"); + _writer.WriteLine($"OS: {_r2r.OS}"); _writer.WriteLine($"Machine: {_r2r.Machine}"); _writer.WriteLine($"ImageBase: 0x{_r2r.ImageBase:X8}"); SkipLine();