1 #pragma once 2 #include "Core/ELF/ElfFile.h" 3 #include "Core/FileManager.h" 4 #include "Commands/CAssemblerCommand.h" 5 #include "Mips.h" 6 7 class MipsElfFile: public AssemblerFile 8 { 9 public: 10 MipsElfFile(); 11 virtual bool open(bool onlyCheck); 12 virtual void close(); isOpen()13 virtual bool isOpen() { return opened; }; 14 virtual bool write(void* data, size_t length); 15 virtual int64_t getVirtualAddress(); 16 virtual int64_t getPhysicalAddress(); 17 virtual int64_t getHeaderSize(); 18 virtual bool seekVirtual(int64_t virtualAddress); 19 virtual bool seekPhysical(int64_t physicalAddress); 20 virtual bool getModuleInfo(SymDataModuleInfo& info); 21 virtual void beginSymData(SymbolData& symData); 22 virtual void endSymData(SymbolData& symData); getFileName()23 virtual const std::wstring& getFileName() { return fileName; }; 24 25 bool load(const std::wstring& fileName, const std::wstring& outputFileName); 26 void save(); 27 bool setSection(const std::wstring& name); 28 private: 29 ElfFile elf; 30 std::wstring fileName; 31 std::wstring outputFileName; 32 bool opened; 33 int platform; 34 35 int segment; 36 int section; 37 size_t sectionOffset; 38 }; 39 40 41 class DirectiveLoadMipsElf: public CAssemblerCommand 42 { 43 public: 44 DirectiveLoadMipsElf(const std::wstring& fileName); 45 DirectiveLoadMipsElf(const std::wstring& inputName, const std::wstring& outputName); 46 virtual bool Validate(); 47 virtual void Encode() const; 48 virtual void writeTempData(TempData& tempData) const; 49 virtual void writeSymData(SymbolData& symData) const; 50 private: 51 std::shared_ptr<MipsElfFile> file; 52 std::wstring inputName; 53 std::wstring outputName; 54 }; 55