protected void Relocate64(ElfLoader64 loader) { DumpRela64(loader); foreach (var relSection in loader.Sections.Where(s => s.Type == SectionHeaderType.SHT_RELA)) { var symbols = loader.Symbols[relSection.LinkedSection]; var referringSection = relSection.RelocatedSection; var rdr = loader.CreateReader(relSection.FileOffset); for (uint i = 0; i < relSection.EntryCount(); ++i) { var rela = Elf64_Rela.Read(rdr); var sym = symbols[(int)(rela.r_info >> 8)]; RelocateEntry(sym, referringSection, rela); } } }
protected void DumpRela64(ElfLoader64 loader) { foreach (var section in loader.Sections.Where(s => s.Type == SectionHeaderType.SHT_RELA)) { Debug.Print("RELA: offset {0:X} link section {1}", section.FileOffset, section.LinkedSection.Name); var symbols = loader.Symbols[section.LinkedSection]; var rdr = loader.CreateReader(section.FileOffset); for (uint i = 0; i < section.EntryCount(); ++i) { var rela = Elf64_Rela.Read(rdr); Debug.Print(" off:{0:X16} type:{1,-16} add:{3,-20} {4,3} {2}", rela.r_offset, (SparcRt)(rela.r_info & 0xFF), symbols[(int)(rela.r_info >> 8)].Name, rela.r_addend, (int)(rela.r_info >> 8)); } } }
public SymtabSegmentRenderer64(ElfLoader64 loader, ElfSection shdr) { this.loader = loader; this.shdr = shdr; }
public DynamicSectionRenderer64(ElfLoader64 loader, ElfSection shdr) { this.loader = loader; this.shdr = shdr; }
private void When_CreateLoader64(bool big_endian) { this.eil = new ElfImageLoader(sc, "foo", this.bytes); this.el64 = new ElfLoader64(eil, eih, this.bytes, 0, big_endian ? ElfLoader.ELFDATA2MSB : ElfLoader.ELFDATA2LSB); el64.ProgramHeaders64.AddRange(programHeaders); el64.Sections.AddRange(sections); }
public ElfObjectLinker64(ElfLoader64 loader, IProcessorArchitecture arch, byte[] rawImage) : base(loader, arch, rawImage) { }
private void When_CreateLoader64() { this.eil = new ElfImageLoader(sc, "foo", this.bytes); this.el64 = new ElfLoader64(eil, eih, this.bytes, 0); el64.ProgramHeaders64.AddRange(programHeaders); el64.Sections.AddRange(sections); }
public PpcRelocator64(ElfLoader64 loader) { this.loader = loader; }
public x86_64Relocator(ElfLoader64 loader) : base(loader) { this.loader = loader; }
public x86_64Relocator(ElfLoader64 loader) { this.loader = loader; }
public RelaSegmentRenderer64(ElfLoader64 loader, ElfSection shdr) { this.loader = loader; this.shdr = shdr; }
public ElfRelocator64(ElfLoader64 loader) { this.loader = loader; }
protected void DumpRela64(ElfLoader64 loader) { foreach (var section in loader.Sections.Where(s => s.Type == SectionHeaderType.SHT_RELA)) { Debug.Print("RELA: offset {0:X} symbol section {1}, relocating in section {2}", section.FileOffset, section.LinkedSection.Name, section.RelocatedSection.Name); var symbols = loader.Symbols[section.LinkedSection]; var rdr = loader.CreateReader(section.FileOffset); for (uint i = 0; i < section.EntryCount(); ++i) { var rela = Elf64_Rela.Read(rdr); Debug.Print(" off:{0:X16} type:{1,-16} add:{3,-20} {4,3} {2}", rela.r_offset, RelocationTypeToString((uint)rela.r_info), symbols[(int)(rela.r_info >> 32)].Name, rela.r_addend, (int)(rela.r_info >> 32)); } } }
public PpcRelocator64(ElfLoader64 loader) : base(loader) { this.loader = loader; }