public override void Render(ImageMapSegment segment, Program program, Formatter formatter) { var entries = shdr.sh_size / shdr.sh_entsize; var symtab = (int)shdr.sh_link; var rdr = loader.CreateReader(shdr.sh_offset); for (int i = 0; i < entries; ++i) { uint iName; if (!rdr.TryReadUInt32(out iName)) { return; } uint value; if (!rdr.TryReadUInt32(out value)) { return; } uint size; if (!rdr.TryReadUInt32(out size)) { return; } byte info; if (!rdr.TryReadByte(out info)) { return; } byte other; if (!rdr.TryReadByte(out other)) { return; } ushort shIndex; if (!rdr.TryReadUInt16(out shIndex)) { return; } string symStr = loader.GetStrPtr(symtab, iName); string segName = loader.GetSectionName(shIndex); formatter.Write("{0,-40} {1:X8} {2:X8} {3:X2} {4}", symStr, value, size, info & 0xFF, segName); formatter.WriteLine(); } }
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 void EIL_LoadStringTable() { mr.ReplayAll(); var el = new ElfImageLoader(services, "foo", rawImg); el.Load(Address.Ptr32(0)); Assert.AreEqual(".symtab", el.GetSectionName(1)); }