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)); } }