#pragma once #include #include #include #include #include namespace theo::decomp { enum sym_type_t { function, inst_split, data, section }; class symbol_t { public: explicit symbol_t(std::string name, std::uintptr_t offset, std::vector data, coff::section_header_t* scn = {}, coff::symbol_t* sym = {}, std::vector relocs = {}, sym_type_t dcmp_type = {}); std::string name() const; std::uintptr_t offset() const; std::uintptr_t allocated_at() const; std::uint32_t size() const; coff::section_header_t* scn() const; std::vector& data(); coff::symbol_t* sym() const; sym_type_t type() const; std::vector& relocs(); void allocated_at(std::uintptr_t allocated_at); std::size_t hash(); static std::size_t hash(const std::string& sym); private: std::string m_name; std::uintptr_t m_offset, m_allocated_at; std::vector m_data; coff::section_header_t* m_scn; std::vector m_relocs; sym_type_t m_sym_type; coff::symbol_t* m_sym; }; } // namespace theo::decomp