#pragma once #include #include #include #include #include #include #include class ELFFile { public: ELFFile(std::string_view path); ~ELFFile(); const LibELF::ElfNativeFileHeader& elf_header() const; std::optional> find_section(std::string_view name) const; bool success() const { return m_success; } std::string_view path() const { return m_path; } private: const LibELF::ElfNativeSectionHeader& section_header(std::size_t index) const; std::string_view section_name(const LibELF::ElfNativeSectionHeader&) const; bool validate_elf_header() const; private: const std::string m_path; bool m_success { false }; int m_fd { -1 }; struct stat m_stat { }; uint8_t* m_mmap { nullptr }; };