private void Given_ImageHeader(ElfMachine machine) { eih = new Elf32_EHdr { e_machine = (ushort)machine, }; }
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); }
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); }
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); }
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); }