public ElfLoader CreateLoader() { var rdr = CreateReader(HEADER_OFFSET); if (fileClass == ELFCLASS64) { var header64 = Elf64_EHdr.Load(rdr); return(new ElfLoader64(this, header64, RawImage, osAbi, endianness)); } else { var header32 = Elf32_EHdr.Load(rdr); return(new ElfLoader32(this, header32, RawImage, endianness)); } }
public ElfLoader CreateLoader() { var rdr = CreateReader(HEADER_OFFSET); var endianness = this.endianness == ElfLoader.ELFDATA2LSB ? EndianServices.Little : EndianServices.Big; if (fileClass == ELFCLASS64) { var header64 = Elf64_EHdr.Load(rdr); trace.Verbose("== ELF header ================="); trace.Verbose(" e_entry: {0:X16}", header64.e_entry); trace.Verbose(" e_phoff: {0:X16}", header64.e_phoff); trace.Verbose(" e_shoff: {0:X16}", header64.e_shoff); trace.Verbose(" e_flags: {0:X8}", header64.e_flags); trace.Verbose(" e_ehsize: {0}", header64.e_ehsize); trace.Verbose(" e_phentsize: {0}", header64.e_phentsize); trace.Verbose(" e_phnum: {0}", header64.e_phnum); trace.Verbose(" e_shentsize: {0}", header64.e_shentsize); trace.Verbose(" e_shnum: {0}", header64.e_shnum); trace.Verbose(" e_shstrndx: {0}", header64.e_shstrndx); return(new ElfLoader64(this.Services, header64, osAbi, endianness, RawImage)); } else { var header32 = Elf32_EHdr.Load(rdr); trace.Verbose("== ELF header ================="); trace.Verbose(" e_entry: {0:X8}", header32.e_entry); trace.Verbose(" e_phoff: {0:X8}", header32.e_phoff); trace.Verbose(" e_shoff: {0:X8}", header32.e_shoff); trace.Verbose(" e_flags: {0:X8}", header32.e_flags); trace.Verbose(" e_ehsize: {0}", header32.e_ehsize); trace.Verbose(" e_phentsize: {0}", header32.e_phentsize); trace.Verbose(" e_phnum: {0}", header32.e_phnum); trace.Verbose(" e_shentsize: {0}", header32.e_shentsize); trace.Verbose(" e_shnum: {0}", header32.e_shnum); trace.Verbose(" e_shstrndx: {0}", header32.e_shstrndx); return(new ElfLoader32(this.Services, header32, osAbi, endianness, RawImage)); } }