forked from Bananymous/banan-os
				
			
		
			
				
	
	
		
			37 lines
		
	
	
		
			823 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			823 B
		
	
	
	
		
			C++
		
	
	
	
| #pragma once
 | |
| 
 | |
| #include <LibELF/Types.h>
 | |
| 
 | |
| #include <cstdint>
 | |
| #include <optional>
 | |
| #include <span>
 | |
| #include <string_view>
 | |
| #include <string>
 | |
| #include <sys/stat.h>
 | |
| 
 | |
| class ELFFile
 | |
| {
 | |
| public:
 | |
| 	ELFFile(std::string_view path);
 | |
| 	~ELFFile();
 | |
| 
 | |
| 	const LibELF::ElfNativeFileHeader& elf_header() const;
 | |
| 	std::optional<std::span<const uint8_t>> 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 };
 | |
| };
 |