Ejemplo n.º 1
0
        public void EIL_LoadStringTable()
        {
            mr.ReplayAll();

            var eil = new ElfImageLoader(sc, "foo", rawImg);

            eil.LoadElfIdentification();
            var el = (ElfLoader32)eil.CreateLoader();

            el.LoadSectionHeaders();
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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
        }
Ejemplo n.º 8
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
        }
Ejemplo n.º 9
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);
        }
Ejemplo n.º 10
0
        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();
        }
Ejemplo n.º 11
0
        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();
        }
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 13
0
        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();
        }
Ejemplo n.º 14
0
        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);
        }
Ejemplo n.º 15
0
        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));
        }
Ejemplo n.º 16
0
 public Relocator(ElfImageLoader loader)
 {
     this.loader = loader;
     machine     = loader.ElfHeader.e_machine;
     e_type      = loader.ElfHeader.e_type;
 }
Ejemplo n.º 17
0
 public MorphosElfImageLoader(IServiceProvider services, string filename, byte[] rawBytes)
     : base(services, filename, rawBytes)
 {
     this.elfLdr = null !;
 }
Ejemplo n.º 18
0
 public MorphosElfImageLoader(IServiceProvider services, ImageLocation imageUri, byte[] rawBytes)
     : base(services, imageUri, rawBytes)
 {
     this.elfLdr = null !;
 }