예제 #1
0
        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();
            }
        }
예제 #2
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));
        }
예제 #3
0
        public void EIL_LoadStringTable()
        {
            mr.ReplayAll();

            var el = new ElfImageLoader(services, "foo", rawImg);
            el.Load(Address.Ptr32(0));
            Assert.AreEqual(".symtab", el.GetSectionName(1));
        }