#include "stdafx.h" #include "ELF32.h" ELF32Loader::ELF32Loader(wxFile& f) : elf32_f(f) , LoaderBase() { } ELF32Loader::ELF32Loader(const wxString& path) : elf32_f(*new wxFile(path)) , LoaderBase() { } bool ELF32Loader::LoadInfo() { if(!elf32_f.IsOpened()) return false; if(!LoadEhdrInfo()) return false; if(!LoadPhdrInfo()) return false; if(!LoadShdrInfo()) return false; return true; } bool ELF32Loader::LoadData() { if(!elf32_f.IsOpened()) return false; if(!LoadEhdrData()) return false; if(!LoadPhdrData()) return false; if(!LoadShdrData()) return false; return true; } bool ELF32Loader::Close() { return elf32_f.Close(); } bool ELF32Loader::LoadEhdrInfo() { elf32_f.Seek(0); ehdr.Load(elf32_f); if(!ehdr.CheckMagic()) return false; switch(ehdr.e_machine) { case MACHINE_PPC64: case MACHINE_SPU: machine = (Elf_Machine)ehdr.e_machine; break; default: machine = MACHINE_Unknown; ConLog.Error("Unknown elf32 type: 0x%x", ehdr.e_machine); return false; } entry = ehdr.GetEntry(); if(entry == 0) { ConLog.Error("elf32 error: entry is null!"); return false; } return true; } bool ELF32Loader::LoadPhdrInfo() { if(ehdr.e_phoff == 0 && ehdr.e_phnum) { ConLog.Error("LoadPhdr32 error: Program header offset is null!"); return false; } elf32_f.Seek(ehdr.e_phoff); for(uint i=0; i= shdr_arr.GetCount()) { ConLog.Error("LoadShdr64 error: shstrndx too big!"); return false; } for(u32 i=0; i