public static void BeginFile(string file, uint newSectionSize, string info) { Program.MainForm.StatusBar.Text = info; if (!s_ElfFiles.ContainsKey(file)) { var elfFile = new ElfFile(); s_ElfFiles[file] = elfFile; s_CurFile = elfFile; elfFile.Load(file, newSectionSize); } }
static void LoadElf(string elf) { FileStream SourceStream = File.Open(elf, FileMode.OpenOrCreate); ElfFile elf_file = new ElfFile(); elf_file.Load(SourceStream); Console.WriteLine("[*] magic: {0}", BitConverter.ToString(elf_file.ehdr.magic).Replace("-", "")); Console.WriteLine("[*] machine_class: {0}", BitConverter.ToString(elf_file.ehdr.machine_class).Replace("-", "")); Console.WriteLine("[*] data_encoding: {0}", BitConverter.ToString(elf_file.ehdr.data_encoding).Replace("-", "")); Console.WriteLine("[*] version: {0}", BitConverter.ToString(elf_file.ehdr.version).Replace("-", "")); Console.WriteLine("[*] os_abi: {0}", BitConverter.ToString(elf_file.ehdr.os_abi).Replace("-", "")); Console.WriteLine("[*] abi_version: {0}", BitConverter.ToString(elf_file.ehdr.abi_version).Replace("-", "")); Console.WriteLine("[*] nident_size: {0}", BitConverter.ToString(elf_file.ehdr.nident_size).Replace("-", "")); Console.WriteLine("[*] type: 0x{0}", BitConverter.ToString(elf_file.ehdr.type).Replace("-", "")); Console.WriteLine("[*] machine: {0}", BitConverter.ToString(elf_file.ehdr.machine).Replace("-", "")); Console.WriteLine("[*] version: {0}", BitConverter.ToString(elf_file.ehdr.version).Replace("-", "")); Console.WriteLine("[*] entry: 0x{0}", BitConverter.ToString(elf_file.ehdr.entry).Replace("-", "")); Console.WriteLine("[*] phoff: 0x{0}", BitConverter.ToString(elf_file.ehdr.phoff).Replace("-", "")); Console.WriteLine("[*] shoff: 0x{0}", BitConverter.ToString(elf_file.ehdr.shoff).Replace("-", "")); Console.WriteLine("[*] flags: 0x{0}", BitConverter.ToString(elf_file.ehdr.flags).Replace("-", "")); Console.WriteLine("[*] ehsize: 0x{0}", BitConverter.ToString(elf_file.ehdr.ehsize).Replace("-", "")); Console.WriteLine("[*] phentsize: 0x{0}", BitConverter.ToString(elf_file.ehdr.phentsize).Replace("-", "")); Console.WriteLine("[*] phnum: 0x{0}", BitConverter.ToString(elf_file.ehdr.phnum).Replace("-", "")); Console.WriteLine("[*] shentsize: 0x{0}", BitConverter.ToString(elf_file.ehdr.shentsize).Replace("-", "")); Console.WriteLine("[*] shnum: 0x{0}", BitConverter.ToString(elf_file.ehdr.shnum).Replace("-", "")); Console.WriteLine("[*] shstridx: {0}", BitConverter.ToString(elf_file.ehdr.shstridx).Replace("-", "")); string nstring = elf_file.shstrtab.Replace("\0", "/"); elf_file.shstrtab = elf_file.shstrtab.Replace("\0", ""); int s = elf_file.shstrtab.Length; string[] names = nstring.Split('/'); names[1].Replace("/", ""); if (s <= 0) { if (names[1] == "") { Console.WriteLine("[!] No Section header names found!"); Console.WriteLine("[.] attempting to identify required sections..."); FixElf(elf_file, SourceStream, elf); } } Console.WriteLine("Section Headers:"); Console.WriteLine(" [Nr] Name Type Addr Off Size Flg Lk Inf Al"); //for i in xrange(elf_file.ehdr.shnum): IEnumerable <int> xrange = Enumerable.Range(0, BitConverter.ToInt16(elf_file.ehdr.shnum, 0)); foreach (int i in xrange) { Console.WriteLine(" {0} {1} ({2}) {3} {4} {5} {6} {7}", i, names[i], elf_file.shdrs[i].name_len.ToString(), BitConverter.ToString(elf_file.shdrs[i].type).Replace("-", ""), BitConverter.ToString(elf_file.shdrs[i].addr).Replace("-", ""), BitConverter.ToString(elf_file.shdrs[i].offset).Replace("-", ""), BitConverter.ToString(elf_file.shdrs[i].size).Replace("-", ""), BitConverter.ToString(elf_file.shdrs[i].flags).Replace("-", "")); } Console.WriteLine("[.] done."); Console.WriteLine("Press any key to continue . . ."); Console.ReadKey(); }