private KeyGenerator CreateGenerator(ELFLoadedImage loadedImage) { try { if (loadedImage.Image.IsValid()) { return(new ELFFileKeyGenerator(Tracer, loadedImage.Image, loadedImage.Path)); } // TODO - mikem 7/1/17 - need to figure out a better way to determine the file vs loaded layout bool layout = loadedImage.Path.StartsWith("/"); var reader = new RelativeAddressSpace(_core.DataSource, loadedImage.LoadAddress, _core.DataSource.Length); var peFile = new PEFile(reader, layout); if (peFile.IsValid()) { return(new PEFileKeyGenerator(Tracer, peFile, loadedImage.Path)); } // Check if this is a macho module in a ELF 5.0.x MacOS dump var machOFile = new MachOFile(reader, 0, true); if (machOFile.IsValid()) { return(new MachOFileKeyGenerator(Tracer, machOFile, loadedImage.Path)); } Tracer.Warning("Unknown ELF core image {0:X16} {1}", loadedImage.LoadAddress, loadedImage.Path); } catch (InvalidVirtualAddressException ex) { Tracer.Error("{0}: {1:X16} {2}", ex.Message, loadedImage.LoadAddress, loadedImage.Path); } return(null); }
public void ParseCore() { Stream core = GetCore(); StreamAddressSpace dataSource = new StreamAddressSpace(core); ELFCoreFile coreReader = new ELFCoreFile(dataSource); ELFLoadedImage loadedImage = coreReader.LoadedImages.Where(i => i.Path.EndsWith("librt-2.17.so")).First(); string buildId = string.Concat(loadedImage.Image.BuildID.Select(b => b.ToString("x2"))); Assert.Equal("1d2ad4eaa62bad560685a4b8dccc8d9aa95e22ce", buildId); }
public void ParseCore() { using (Stream core = TestUtilities.OpenCompressedFile("TestBinaries/core.gz")) { StreamAddressSpace dataSource = new StreamAddressSpace(core); ELFCoreFile coreReader = new ELFCoreFile(dataSource); Assert.True(coreReader.IsValid()); ELFLoadedImage loadedImage = coreReader.LoadedImages.Where(i => i.Path.EndsWith("librt-2.17.so")).First(); Assert.True(loadedImage.Image.IsValid()); Assert.True(loadedImage.Image.Header.Type == ELFHeaderType.Shared); string buildId = TestUtilities.ToHexString(loadedImage.Image.BuildID); Assert.Equal("1d2ad4eaa62bad560685a4b8dccc8d9aa95e22ce", buildId); } }
public void ParseTriageDump() { using (Stream core = TestUtilities.OpenCompressedFile("TestBinaries/triagedump.gz")) { StreamAddressSpace dataSource = new StreamAddressSpace(core); ELFCoreFile coreReader = new ELFCoreFile(dataSource); Assert.True(coreReader.IsValid()); ELFLoadedImage loadedImage = coreReader.LoadedImages.Where(i => i.Path.EndsWith("libcoreclr.so")).First(); Assert.True(loadedImage.Image.IsValid()); Assert.True(loadedImage.Image.Header.Type == ELFHeaderType.Shared); string buildId = TestUtilities.ToHexString(loadedImage.Image.BuildID); Assert.Equal("8f39a52a756311ab365090bfe9edef7ee8c44503", buildId); } }
public void ParseCore() { using (FileStream core = File.OpenRead("TestBinaries\\core")) { StreamAddressSpace dataSource = new StreamAddressSpace(core); ELFCoreFile coreReader = new ELFCoreFile(dataSource); ELFLoadedImage loadedImage = coreReader.LoadedImages.Where(i => i.Path.EndsWith("libcoreclr.so")).First(); string buildId = string.Concat(loadedImage.Image.BuildID.Select(b => b.ToString("x2"))); //this is the build id for libcoreclr.so from package: // https://dotnet.myget.org/feed/dotnet-core/package/nuget/runtime.ubuntu.14.04-x64.Microsoft.NETCore.Runtime.CoreCLR/1.0.2 Assert.Equal("bc0d85e535168f1a21a2dd79a466b3988bd274aa", buildId); } }