Ejemplo n.º 1
0
 private void Given_ImageHeader(ElfMachine machine)
 {
     eih = new Elf32_EHdr
     {
         e_machine = (ushort)machine,
     };
 }
Ejemplo n.º 2
0
        private void ReadMod0(byte[] dcmpTextData, SegmentMap map)
        {
            var f    = new LeImageReader(dcmpTextData);
            var mod0 = f.ReadStruct <Mod0>();

            if (!map.TryFindSegment(mod0.DynamicOffset, out var dynseg))
            {
                return;
            }

            var offset = mod0.DynamicOffset - dynseg.MemoryArea.BaseAddress.ToLinear();

            offset += mod0.MagicOffset;
            var rdr    = dynseg.MemoryArea.CreateLeReader((int)offset);
            var elfHdr = new Elf32_EHdr {
                e_machine = (ushort)ElfMachine.EM_ARM
            };
            var elfLoader = new ElfLoader32(Services, elfHdr, 0, EndianServices.Little, RawImage);

            var(deps, entries) = elfLoader.LoadDynamicSegment(rdr);

            var dynEntries = entries.ToDictionary(e => e.Tag, e => e.UValue);
            var syms       = LoadSymbols(map, dynEntries);

            LoadRelocations(map, dynEntries, syms);
        }
Ejemplo n.º 3
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.º 4
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.º 5
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);
        }