#pragma once #include "loader/binary.hpp" #include #include #include class PELoader : public Binary { public: PELoader(); ~PELoader() override; bool load(const string& path) override; BinaryFormat getFormat() const override { return BinaryFormat::PE; } Arch getArch() const override { return m_arch; } addr_t getEntryPoint() const override { return m_entry; } addr_t getImageBase() const override { return m_image_base; } vector readBytes(addr_t vaddr, size_t size) const override; vector> getDataRanges() const override; vector> getExecutableRanges() const override; vector> getRuntimeFunctions() const override; vector> getExportedFunctions() const override; vector getImportedFunctions() const override; const string& getPath() const override { return m_path; } private: bool parseHeaders(); bool parseImportTable(); bool parseExportTable(); string m_path; Arch m_arch; addr_t m_entry; addr_t m_image_base; vector m_data; vector> m_exec_ranges; vector> m_data_ranges; vector> m_pdata; vector> m_exports; vector m_imports; };