#pragma once #include "types.hpp" enum class BinaryFormat { PE, ELF, UNKNOWN }; enum class Arch { X86, X64, UNKNOWN }; class Binary { public: virtual ~Binary() = default; virtual bool load(const string& path) = 0; virtual BinaryFormat getFormat() const = 0; virtual Arch getArch() const = 0; virtual addr_t getEntryPoint() const = 0; virtual addr_t getImageBase() const = 0; virtual vector readBytes(addr_t vaddr, size_t size) const = 0; virtual vector> getExecutableRanges() const = 0; virtual vector> getDataRanges() const { return {}; } virtual vector> getRuntimeFunctions() const { return {}; } virtual vector> getExportedFunctions() const = 0; virtual vector getImportedFunctions() const { return {}; } virtual const string& getPath() const = 0; virtual string getSymbolName(addr_t addr) const { return {}; } static unique_ptr create(const string& path); };