public void EIL_LoadStringTable() { mr.ReplayAll(); var eil = new ElfImageLoader(sc, "foo", rawImg); eil.LoadElfIdentification(); var el = (ElfLoader32)eil.CreateLoader(); el.LoadSectionHeaders(); }
public void EIL_LoadProgramHeaders() { var eil = new ElfImageLoader(sc, "foo", rawImg); eil.LoadElfIdentification(); var el = (ElfLoader32)eil.CreateLoader(); el.LoadSegments(); el.LoadSectionHeaders(); //el.Dump(Console.Out); }
public void EIL_Load() { mr.ReplayAll(); var el = new ElfImageLoader(sc, "foo", rawImg); el.LoadElfIdentification(); var lr = el.Load(Address.Ptr32(0)); Assert.AreSame(arch, lr.Architecture); }
public void EIL_LoadProgramHeaders() { var eil = new ElfImageLoader(sc, ImageLocation.FromUri("file:foo"), rawImg); eil.LoadElfIdentification(); var el = (ElfLoader32)eil.CreateLoader(); el.LoadSegments(); el.Sections.AddRange(el.LoadSectionHeaders()); //el.Dump(Console.Out); }
public override Program Load(Address?addrLoad) { var sr = new StructureReader <MorphosHeader>(new BeImageReader(this.RawImage)); var hdr = sr.Read(); var embeddedElfImage = new byte[this.RawImage.Length - hdr.ElfOffset]; //$PERF: this is a prime candidate for Span<T> Array.Copy(this.RawImage, hdr.ElfOffset, embeddedElfImage, 0, embeddedElfImage.Length); this.elfLdr = new ElfImageLoader(this.Services, this.Filename, embeddedElfImage); var program = elfLdr.Load(addrLoad); return(program); }
private void Given_Linker(bool big_endian) { BuildObjectFile32(); var eil = new ElfImageLoader(sc, "foo.o", rawBytes); eil.LoadElfIdentification(); var eh = Elf32_EHdr.Load(new BeImageReader(rawBytes, ElfImageLoader.HEADER_OFFSET)); var el = new ElfLoader32(eil, eh, rawBytes, big_endian ? ElfLoader.ELFDATA2MSB : ElfLoader.ELFDATA2LSB); el.LoadSectionHeaders(); el.LoadSymbolsFromSections(); this.linker = new ElfObjectLinker32(el, arch.Object, rawBytes); }
public void Setup() { this.program = new Program(); this.program.SegmentMap = new SegmentMap(GetLoadAddress()); this.program.Architecture = GetArchitecture(); this.symbols = new Dictionary <int, ElfSymbol>(); var services = new ServiceContainer(); var elfImgLoader = new ElfImageLoader(services, "foo.elf", new byte[0]); this.loader = CreateLoader(); loader.Sections.Add(new ElfSection { Name = "" }); // section 0 }
public void Setup() { this.program = new Program(); this.program.SegmentMap = new SegmentMap(Address.Ptr32(0x1000)); this.program.Architecture = new Reko.Arch.X86.X86ArchitectureFlat32("x86-flat-32"); this.symbols = new Dictionary <int, ElfSymbol>(); var services = new ServiceContainer(); var elfImgLoader = new ElfImageLoader(services, "foo.elf", new byte[0]); this.loader = new ElfLoader32(); loader.Sections.Add(new ElfSection { Name = "" }); // section 0 }
private void Given_Linker() { BuildObjectFile32(); mr.ReplayAll(); var eil = new ElfImageLoader(sc, "foo.o", rawBytes); eil.LoadElfIdentification(); var eh = Elf32_EHdr.Load(new BeImageReader(rawBytes, ElfImageLoader.HEADER_OFFSET)); var el = new ElfLoader32(eil, eh, rawBytes); el.LoadSectionHeaders(); el.LoadSymbols(); this.linker = new ElfObjectLinker32(el, arch, rawBytes); }
public void EIL_LoadCellLv2() { var opEl = mr.Stub <OperatingEnvironment>(); var platform = new DefaultPlatform(services, arch); dcSvc.Stub(d => d.GetEnvironment("elf-cell-lv2")).Return(opEl); opEl.Expect(o => o.Load(null, null)).IgnoreArguments().Return(platform); mr.ReplayAll(); var el = new ElfImageLoader(services, "foo", rawImg); el.CreatePlatform(0x66); // ELFOSABI_CELL_LV2; mr.VerifyAll(); }
public void EIL_LoadProgramHeaders() { mr.ReplayAll(); var eil = new ElfImageLoader(sc, "foo", rawImg); eil.LoadElfIdentification(); var el = (ElfLoader32)eil.CreateLoader(); el.LoadProgramHeaderTable(); el.LoadSectionHeaders(); //el.Dump(Console.Out); mr.VerifyAll(); }
private void Given_Linker(bool big_endian) { BuildObjectFile32(big_endian); var eil = new ElfImageLoader(sc, ImageLocation.FromUri("file:foo.o"), rawBytes); eil.LoadElfIdentification(); var rdr = big_endian ? new BeImageReader(rawBytes, ElfImageLoader.HEADER_OFFSET) : (EndianImageReader) new LeImageReader(rawBytes, ElfImageLoader.HEADER_OFFSET); var eh = Elf32_EHdr.Load(rdr); var el = new ElfLoader32(sc, eh, 0, big_endian ? EndianServices.Big: EndianServices.Little, rawBytes); el.Sections.AddRange(el.LoadSectionHeaders()); el.LoadSymbolsFromSections(); this.linker = new ElfObjectLinker32(el, arch.Object, rawBytes); }
public void EIL_LoadCellLv2() { var opEl = new Mock <PlatformDefinition>(); var platform = new DefaultPlatform(sc, arch.Object); cfgSvc.Setup(d => d.GetEnvironment("elf-cell-lv2")).Returns(opEl.Object); opEl.Setup(o => o.Load( It.IsAny <IServiceProvider>(), It.IsAny <IProcessorArchitecture>())) .Returns(platform) .Verifiable(); var eil = new ElfImageLoader(sc, "foo", rawImg); eil.LoadElfIdentification(); var el = eil.CreateLoader(); el.LoadPlatform(0x66, arch.Object); // ELFOSABI_CELL_LV2; opEl.VerifyAll(); }
public void EIL_LoadSections() { mr.ReplayAll(); var eil = new ElfImageLoader(sc, "foo", rawImg); eil.LoadElfIdentification(); var el = (ElfLoader32)eil.CreateLoader(); el.LoadSectionHeaders(); Assert.AreEqual("", el.Sections[0].Name); Assert.AreEqual(".interp", el.Sections[1].Name); Assert.AreEqual(".note.ABI-tag", el.Sections[2].Name); Assert.AreEqual(".hash", el.Sections[3].Name); Assert.AreEqual(".dynsym", el.Sections[4].Name); Assert.AreEqual(".dynstr", el.Sections[5].Name); Assert.AreEqual(".gnu.version", el.Sections[6].Name); Assert.AreEqual(".gnu.version_r", el.Sections[7].Name); Assert.AreEqual(".rel.dyn", el.Sections[8].Name); Assert.AreEqual(".rel.plt", el.Sections[9].Name); Assert.AreEqual(".init", el.Sections[10].Name); Assert.AreEqual(".plt", el.Sections[11].Name); Assert.AreEqual(".text", el.Sections[12].Name); Assert.AreEqual(".fini", el.Sections[13].Name); Assert.AreEqual(".rodata", el.Sections[14].Name); Assert.AreEqual(".eh_frame", el.Sections[15].Name); Assert.AreEqual(".ctors", el.Sections[16].Name); Assert.AreEqual(".dtors", el.Sections[17].Name); Assert.AreEqual(".jcr", el.Sections[18].Name); Assert.AreEqual(".dynamic", el.Sections[19].Name); Assert.AreEqual(".got", el.Sections[20].Name); Assert.AreEqual(".got.plt", el.Sections[21].Name); Assert.AreEqual(".data", el.Sections[22].Name); Assert.AreEqual(".bss", el.Sections[23].Name); Assert.AreEqual(".comment", el.Sections[24].Name); Assert.AreEqual(".shstrtab", el.Sections[25].Name); Assert.AreEqual(".symtab", el.Sections[26].Name); Assert.AreEqual(".strtab", el.Sections[27].Name); }
public void EIL_LoadSections() { mr.ReplayAll(); var el = new ElfImageLoader(services, "foo", rawImg); el.Load(Address.Ptr32(0)); Assert.AreEqual("", el.GetSectionName(el.SectionHeaders[0].sh_name)); Assert.AreEqual(".interp", el.GetSectionName(el.SectionHeaders[1].sh_name)); Assert.AreEqual(".note.ABI-tag", el.GetSectionName(el.SectionHeaders[2].sh_name)); Assert.AreEqual(".hash", el.GetSectionName(el.SectionHeaders[3].sh_name)); Assert.AreEqual(".dynsym", el.GetSectionName(el.SectionHeaders[4].sh_name)); Assert.AreEqual(".dynstr", el.GetSectionName(el.SectionHeaders[5].sh_name)); Assert.AreEqual(".gnu.version", el.GetSectionName(el.SectionHeaders[6].sh_name)); Assert.AreEqual(".gnu.version_r", el.GetSectionName(el.SectionHeaders[7].sh_name)); Assert.AreEqual(".rel.dyn", el.GetSectionName(el.SectionHeaders[8].sh_name)); Assert.AreEqual(".rel.plt", el.GetSectionName(el.SectionHeaders[9].sh_name)); Assert.AreEqual(".init", el.GetSectionName(el.SectionHeaders[10].sh_name)); Assert.AreEqual(".plt", el.GetSectionName(el.SectionHeaders[11].sh_name)); Assert.AreEqual(".text", el.GetSectionName(el.SectionHeaders[12].sh_name)); Assert.AreEqual(".fini", el.GetSectionName(el.SectionHeaders[13].sh_name)); Assert.AreEqual(".rodata", el.GetSectionName(el.SectionHeaders[14].sh_name)); Assert.AreEqual(".eh_frame", el.GetSectionName(el.SectionHeaders[15].sh_name)); Assert.AreEqual(".ctors", el.GetSectionName(el.SectionHeaders[16].sh_name)); Assert.AreEqual(".dtors", el.GetSectionName(el.SectionHeaders[17].sh_name)); Assert.AreEqual(".jcr", el.GetSectionName(el.SectionHeaders[18].sh_name)); Assert.AreEqual(".dynamic", el.GetSectionName(el.SectionHeaders[19].sh_name)); Assert.AreEqual(".got", el.GetSectionName(el.SectionHeaders[20].sh_name)); Assert.AreEqual(".got.plt", el.GetSectionName(el.SectionHeaders[21].sh_name)); Assert.AreEqual(".data", el.GetSectionName(el.SectionHeaders[22].sh_name)); Assert.AreEqual(".bss", el.GetSectionName(el.SectionHeaders[23].sh_name)); Assert.AreEqual(".comment", el.GetSectionName(el.SectionHeaders[24].sh_name)); Assert.AreEqual(".shstrtab", el.GetSectionName(el.SectionHeaders[25].sh_name)); Assert.AreEqual(".symtab", el.GetSectionName(el.SectionHeaders[26].sh_name)); Assert.AreEqual(".strtab", el.GetSectionName(el.SectionHeaders[27].sh_name)); }
public Relocator(ElfImageLoader loader) { this.loader = loader; machine = loader.ElfHeader.e_machine; e_type = loader.ElfHeader.e_type; }
public MorphosElfImageLoader(IServiceProvider services, string filename, byte[] rawBytes) : base(services, filename, rawBytes) { this.elfLdr = null !; }
public MorphosElfImageLoader(IServiceProvider services, ImageLocation imageUri, byte[] rawBytes) : base(services, imageUri, rawBytes) { this.elfLdr = null !; }