40 using identity_t = std::array<uint8_t, 16>;
41 using abstract_architecture_t = std::pair<ARCHITECTURES, std::set<MODES>>;
133 return machine_type_;
144 return object_file_version_;
154 return program_headers_offset_;
159 return section_headers_offset_;
164 return processor_flags_;
176 return program_header_size_;
181 return numberof_segments_;
187 return section_header_size_;
195 return numberof_sections_;
200 return section_string_table_idx_;
208 const identity_t& identity()
const {
214 return CLASS(identity_[EI_CLASS]);
219 return ELF_DATA(identity_[EI_DATA]);
224 return VERSION(identity_[EI_VERSION]);
229 return OS_ABI(identity_[EI_OSABI]);
234 return identity_[EI_ABIVERSION];
237 bool has(PROCESSOR_FLAGS flag)
const;
239 std::vector<PROCESSOR_FLAGS> flags_list()
const;
241 void file_type(FILE_TYPE type) {
245 void machine_type(ARCH arch) {
246 machine_type_ = arch;
249 void object_file_version(VERSION version) {
250 object_file_version_ = version;
253 void entrypoint(uint64_t entry) {
257 void program_headers_offset(uint64_t offset) {
258 program_headers_offset_ = offset;
261 void section_headers_offset(uint64_t offset) {
262 section_headers_offset_ = offset;
265 void processor_flag(uint32_t flags) {
266 processor_flags_ = flags;
269 void header_size(uint32_t size) {
273 void program_header_size(uint32_t size) {
274 program_header_size_ = size;
277 void numberof_segments(uint32_t n) {
278 numberof_segments_ = n;
280 void section_header_size(uint32_t size) {
281 section_header_size_ = size;
284 void numberof_sections(uint32_t n) {
285 numberof_sections_ = n;
287 void section_name_table_idx(uint32_t idx) {
288 section_string_table_idx_ = idx;
291 void identity(
const std::string& identity);
292 void identity(
const identity_t& identity);
294 void identity_class(CLASS cls) {
295 identity_[EI_CLASS] =
static_cast<uint8_t
>(cls);
298 void identity_data(ELF_DATA data) {
299 identity_[EI_DATA] =
static_cast<uint8_t
>(data);
302 void identity_version(VERSION version) {
303 identity_[EI_VERSION] =
static_cast<uint8_t
>(
version);
306 void identity_os_abi(OS_ABI osabi) {
307 identity_[EI_OSABI] =
static_cast<uint8_t
>(osabi);
310 void identity_abi_version(uint8_t version) {
311 identity_[EI_ABIVERSION] =
version;
314 void accept(Visitor& visitor)
const override;
316 LIEF_API
friend std::ostream& operator<<(std::ostream& os,
const Header& hdr);
320 LIEF_LOCAL Header(
const T& header);
322 identity_t identity_;
323 FILE_TYPE file_type_ = FILE_TYPE::NONE;
324 ARCH machine_type_ = ARCH::NONE;
325 VERSION object_file_version_ = VERSION::NONE;
326 uint64_t entrypoint_ = 0;
327 uint64_t program_headers_offset_ = 0;
328 uint64_t section_headers_offset_ = 0;
329 uint32_t processor_flags_ = 0;
330 uint32_t header_size_ = 0;
331 uint32_t program_header_size_ = 0;
332 uint32_t numberof_segments_ = 0;
333 uint32_t section_header_size_ = 0;
334 uint32_t numberof_sections_ = 0;
335 uint32_t section_string_table_idx_ = 0;