Пример #1
0
        public Elf(byte[] data)
        {
            var er = new EndianBinaryReader(new MemoryStream(data), Endianness.LittleEndian);

            Header = new ElfHeader(er);

            er.BaseStream.Position = Header.ProgramHeaderTableOffset;
            ProgramHeaderTable     = new ProgramHeaderTableEntry[Header.ProgramHeaderTableEntryCount];
            for (int i = 0; i < Header.ProgramHeaderTableEntryCount; i++)
            {
                ProgramHeaderTable[i] = new ProgramHeaderTableEntry(er);
            }

            er.BaseStream.Position = Header.SectionHeaderTableOffset;
            SectionHeaderTable     = new SectionHeaderTableEntry[Header.SectionHeaderTableEntryCount];
            for (int i = 0; i < Header.SectionHeaderTableEntryCount; i++)
            {
                SectionHeaderTable[i] = new SectionHeaderTableEntry(er);
            }

            er.Close();

            var namestab = new ElfStrtab(SectionHeaderTable[Header.SectionNamesIndex], null);

            Sections = new ElfSection[SectionHeaderTable.Length];
            for (int i = 0; i < SectionHeaderTable.Length; i++)
            {
                Sections[i] = ElfSection.CreateInstance(SectionHeaderTable[i],
                                                        namestab.GetString(SectionHeaderTable[i].NameOffset));
            }
        }