LIEF: Library to Instrument Executable Formats
Version 1.0.0
Toggle main menu visibility
Loading...
Searching...
No Matches
lief-install
x86_64
static
include
LIEF
ELF
ELF/Header.hpp
Go to the documentation of this file.
1
/* Copyright 2017 - 2026 R. Thomas
2
* Copyright 2017 - 2026 Quarkslab
3
*
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at
7
*
8
* http://www.apache.org/licenses/LICENSE-2.0
9
*
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
*/
16
#ifndef LIEF_ELF_HEADER_H
17
#define LIEF_ELF_HEADER_H
18
19
#include <ostream>
20
#include <array>
21
#include <vector>
22
23
#include "
LIEF/Object.hpp
"
24
#include "
LIEF/visibility.h
"
25
26
#include "
LIEF/ELF/enums.hpp
"
27
#include "
LIEF/ELF/ProcessorFlags.hpp
"
28
29
namespace
LIEF
{
30
namespace
ELF
{
31
class
Parser
;
32
35
class
LIEF_API
Header
:
public
Object
{
36
friend
class
Parser
;
37
public
:
38
using
identity_t
= std::array<uint8_t, 16>;
39
40
public
:
42
enum
ELF_INDENT
{
43
ELI_MAG0
= 0,
44
ELI_MAG1
= 1,
45
ELI_MAG2
= 2,
46
ELI_MAG3
= 3,
47
ELI_CLASS
= 4,
48
ELI_DATA
= 5,
49
ELI_VERSION
= 6,
50
ELI_OSABI
= 7,
51
ELI_ABIVERSION
= 8,
52
ELI_PAD
= 9,
53
ELI_NIDENT
= 16
54
};
55
58
enum class
FILE_TYPE
{
59
NONE
= 0,
60
REL = 1,
61
EXEC = 2,
62
DYN = 3,
63
CORE = 4,
64
};
65
67
enum class
VERSION
{
68
NONE
= 0,
69
CURRENT = 1,
70
};
71
73
enum class
CLASS
{
74
NONE
= 0,
75
ELF32,
76
ELF64,
77
};
78
80
enum class
OS_ABI
{
81
SYSTEMV = 0,
82
HPUX = 1,
83
NETBSD = 2,
84
GNU = 3,
85
LINUX = 3,
86
HURD = 4,
87
SOLARIS = 6,
88
AIX = 7,
89
IRIX = 8,
90
FREEBSD = 9,
91
TRU64 = 10,
92
MODESTO = 11,
93
OPENBSD = 12,
94
OPENVMS = 13,
95
NSK = 14,
96
AROS = 15,
97
FENIXOS = 16,
98
CLOUDABI = 17,
99
C6000_ELFABI = 64,
100
AMDGPU_HSA = 64,
101
C6000_LINUX = 65,
102
ARM
= 97,
103
STANDALONE = 255
104
};
105
107
enum class
ELF_DATA
{
108
NONE
= 0,
109
LSB = 1,
110
MSB = 2
111
};
112
113
Header
() =
default
;
114
115
Header
&
operator=
(
const
Header
&) =
default
;
116
Header
(
const
Header
&) =
default
;
117
118
~Header
()
override
=
default
;
119
121
FILE_TYPE
file_type
()
const
{
122
return
file_type_;
123
}
124
126
ARCH
machine_type
()
const
{
127
return
machine_type_;
128
}
129
131
VERSION
object_file_version
()
const
{
132
return
object_file_version_;
133
}
134
136
uint64_t
entrypoint
()
const
{
137
return
entrypoint_;
138
}
139
141
uint64_t
program_headers_offset
()
const
{
142
return
program_headers_offset_;
143
}
144
146
uint64_t
section_headers_offset
()
const
{
147
return
section_headers_offset_;
148
}
149
151
uint32_t
processor_flag
()
const
{
152
return
processor_flags_;
153
}
154
157
uint32_t
header_size
()
const
{
158
return
header_size_;
159
}
160
163
uint32_t
program_header_size
()
const
{
164
return
program_header_size_;
165
}
166
168
uint32_t
numberof_segments
()
const
{
169
return
numberof_segments_;
170
}
171
174
uint32_t
section_header_size
()
const
{
175
return
section_header_size_;
176
}
177
182
uint32_t
numberof_sections
()
const
{
183
return
numberof_sections_;
184
}
185
187
uint32_t
section_name_table_idx
()
const
{
188
return
section_string_table_idx_;
189
}
190
192
identity_t
&
identity
() {
193
return
identity_;
194
}
195
196
const
identity_t
&
identity
()
const
{
197
return
identity_;
198
}
199
201
CLASS
identity_class
()
const
{
202
return
CLASS
(identity_[
ELI_CLASS
]);
203
}
204
206
ELF_DATA
identity_data
()
const
{
207
return
ELF_DATA
(identity_[
ELI_DATA
]);
208
}
209
211
VERSION
identity_version
()
const
{
212
return
VERSION
(identity_[
ELI_VERSION
]);
213
}
214
216
OS_ABI
identity_os_abi
()
const
{
217
return
OS_ABI
(identity_[
ELI_OSABI
]);
218
}
219
221
uint32_t
identity_abi_version
()
const
{
222
return
identity_[
ELI_ABIVERSION
];
223
}
224
225
bool
has
(
PROCESSOR_FLAGS
flag)
const
;
226
227
std::vector<PROCESSOR_FLAGS>
flags_list
()
const
;
228
229
void
file_type
(
FILE_TYPE
type) {
230
file_type_ = type;
231
}
232
233
void
machine_type
(
ARCH
arch) {
234
machine_type_ = arch;
235
}
236
237
void
object_file_version
(
VERSION
version
) {
238
object_file_version_ =
version
;
239
}
240
241
void
entrypoint
(uint64_t entry) {
242
entrypoint_ = entry;
243
}
244
245
void
program_headers_offset
(uint64_t offset) {
246
program_headers_offset_ = offset;
247
}
248
249
void
section_headers_offset
(uint64_t offset) {
250
section_headers_offset_ = offset;
251
}
252
253
void
processor_flag
(uint32_t flags) {
254
processor_flags_ = flags;
255
}
256
257
void
header_size
(uint32_t size) {
258
header_size_ = size;
259
}
260
261
void
program_header_size
(uint32_t size) {
262
program_header_size_ = size;
263
}
264
265
void
numberof_segments
(uint32_t n) {
266
numberof_segments_ = n;
267
}
268
void
section_header_size
(uint32_t size) {
269
section_header_size_ = size;
270
}
271
272
void
numberof_sections
(uint32_t n) {
273
numberof_sections_ = n;
274
}
275
void
section_name_table_idx
(uint32_t idx) {
276
section_string_table_idx_ = idx;
277
}
278
279
void
identity
(
const
std::string&
identity
);
280
void
identity
(
const
identity_t
&
identity
);
281
282
void
identity_class
(
CLASS
cls) {
283
identity_[
ELI_CLASS
] =
static_cast<
uint8_t
>
(cls);
284
}
285
286
void
identity_data
(
ELF_DATA
data) {
287
identity_[
ELI_DATA
] =
static_cast<
uint8_t
>
(data);
288
}
289
290
void
identity_version
(
VERSION
version
) {
291
identity_[
ELI_VERSION
] =
static_cast<
uint8_t
>
(
version
);
292
}
293
294
void
identity_os_abi
(
OS_ABI
osabi) {
295
identity_[
ELI_OSABI
] =
static_cast<
uint8_t
>
(osabi);
296
}
297
298
void
identity_abi_version
(uint8_t
version
) {
299
identity_[
ELI_ABIVERSION
] =
version
;
300
}
301
302
void
accept
(
Visitor
& visitor)
const override
;
303
304
LIEF_API
friend
std::ostream&
operator<<
(std::ostream& os,
const
Header
& hdr);
305
306
private
:
307
template
<
class
T>
308
LIEF_LOCAL
Header
(
const
T& header);
309
310
identity_t
identity_;
311
FILE_TYPE
file_type_ =
FILE_TYPE::NONE
;
312
ARCH
machine_type_ =
ARCH::NONE
;
313
VERSION
object_file_version_ =
VERSION::NONE
;
314
uint64_t entrypoint_ = 0;
315
uint64_t program_headers_offset_ = 0;
316
uint64_t section_headers_offset_ = 0;
317
uint32_t processor_flags_ = 0;
318
uint32_t header_size_ = 0;
319
uint32_t program_header_size_ = 0;
320
uint32_t numberof_segments_ = 0;
321
uint32_t section_header_size_ = 0;
322
uint32_t numberof_sections_ = 0;
323
uint32_t section_string_table_idx_ = 0;
324
};
325
326
LIEF_API
const
char
*
to_string
(
Header::FILE_TYPE
type);
327
LIEF_API
const
char
*
to_string
(
Header::VERSION
version
);
328
LIEF_API
const
char
*
to_string
(
Header::CLASS
version
);
329
LIEF_API
const
char
*
to_string
(
Header::OS_ABI
abi);
330
LIEF_API
const
char
*
to_string
(
Header::ELF_DATA
abi);
331
332
}
333
}
334
#endif
enums.hpp
Object.hpp
ProcessorFlags.hpp
LIEF::ELF::Header::identity
void identity(const identity_t &identity)
LIEF::ELF::Header::numberof_sections
uint32_t numberof_sections() const
Return the number of sections.
Definition
ELF/Header.hpp:182
LIEF::ELF::Header::identity_t
std::array< uint8_t, 16 > identity_t
Definition
ELF/Header.hpp:38
LIEF::ELF::Header::processor_flag
uint32_t processor_flag() const
Processor-specific flags.
Definition
ELF/Header.hpp:151
LIEF::ELF::Header::section_headers_offset
void section_headers_offset(uint64_t offset)
Definition
ELF/Header.hpp:249
LIEF::ELF::Header::numberof_segments
uint32_t numberof_segments() const
Return the number of segments.
Definition
ELF/Header.hpp:168
LIEF::ELF::Header::identity
void identity(const std::string &identity)
LIEF::ELF::Header::Header
Header()=default
LIEF::ELF::Header::program_headers_offset
uint64_t program_headers_offset() const
Offset of the programs table (also known as segments table).
Definition
ELF/Header.hpp:141
LIEF::ELF::Header::entrypoint
uint64_t entrypoint() const
Executable entrypoint.
Definition
ELF/Header.hpp:136
LIEF::ELF::Header::operator<<
friend std::ostream & operator<<(std::ostream &os, const Header &hdr)
LIEF::ELF::Header::program_headers_offset
void program_headers_offset(uint64_t offset)
Definition
ELF/Header.hpp:245
LIEF::ELF::Header::identity_version
VERSION identity_version() const
Definition
ELF/Header.hpp:211
LIEF::ELF::Header::flags_list
std::vector< PROCESSOR_FLAGS > flags_list() const
LIEF::ELF::Header::identity
const identity_t & identity() const
Definition
ELF/Header.hpp:196
LIEF::ELF::Header::ELF_DATA
ELF_DATA
Match the result Elfxx_Ehdr.e_ident[EI_DATA].
Definition
ELF/Header.hpp:107
LIEF::ELF::Header::header_size
void header_size(uint32_t size)
Definition
ELF/Header.hpp:257
LIEF::ELF::Header::~Header
~Header() override=default
LIEF::ELF::Header::machine_type
void machine_type(ARCH arch)
Definition
ELF/Header.hpp:233
LIEF::ELF::Header::VERSION
VERSION
Match the result of Elfxx_Ehdr.e_version.
Definition
ELF/Header.hpp:67
LIEF::ELF::Header::VERSION::NONE
@ NONE
Invalid ELF version.
Definition
ELF/Header.hpp:68
LIEF::ELF::Header::identity_data
void identity_data(ELF_DATA data)
Definition
ELF/Header.hpp:286
LIEF::ELF::Header::identity_data
ELF_DATA identity_data() const
Specify the data encoding.
Definition
ELF/Header.hpp:206
LIEF::ELF::Header::FILE_TYPE
FILE_TYPE
The type of the underlying ELF file. This enum matches the semantic of ET_NONE, ET_REL,...
Definition
ELF/Header.hpp:58
LIEF::ELF::Header::FILE_TYPE::NONE
@ NONE
Can't be determined.
Definition
ELF/Header.hpp:59
LIEF::ELF::Header::identity
identity_t & identity()
Return the ELF identity as an std::array.
Definition
ELF/Header.hpp:192
LIEF::ELF::Header::identity_class
CLASS identity_class() const
Return the object's class. ELF64 or ELF32.
Definition
ELF/Header.hpp:201
LIEF::ELF::Header::program_header_size
uint32_t program_header_size() const
Return the size of a program header (i.e. sizeof(Elfxx_Phdr)) This size should be 56 for an ELF64 bin...
Definition
ELF/Header.hpp:163
LIEF::ELF::Header::accept
void accept(Visitor &visitor) const override
LIEF::ELF::Header::Header
Header(const Header &)=default
LIEF::ELF::Header::ELF_INDENT
ELF_INDENT
e_ident size and indices.
Definition
ELF/Header.hpp:42
LIEF::ELF::Header::ELI_MAG2
@ ELI_MAG2
File identification index.
Definition
ELF/Header.hpp:45
LIEF::ELF::Header::ELI_OSABI
@ ELI_OSABI
OS/ABI identification.
Definition
ELF/Header.hpp:50
LIEF::ELF::Header::ELI_MAG1
@ ELI_MAG1
File identification index.
Definition
ELF/Header.hpp:44
LIEF::ELF::Header::ELI_CLASS
@ ELI_CLASS
File class.
Definition
ELF/Header.hpp:47
LIEF::ELF::Header::ELI_VERSION
@ ELI_VERSION
File version.
Definition
ELF/Header.hpp:49
LIEF::ELF::Header::ELI_MAG3
@ ELI_MAG3
File identification index.
Definition
ELF/Header.hpp:46
LIEF::ELF::Header::ELI_PAD
@ ELI_PAD
Start of padding bytes.
Definition
ELF/Header.hpp:52
LIEF::ELF::Header::ELI_NIDENT
@ ELI_NIDENT
Number of bytes in e_ident.
Definition
ELF/Header.hpp:53
LIEF::ELF::Header::ELI_MAG0
@ ELI_MAG0
File identification index.
Definition
ELF/Header.hpp:43
LIEF::ELF::Header::ELI_DATA
@ ELI_DATA
Data encoding.
Definition
ELF/Header.hpp:48
LIEF::ELF::Header::ELI_ABIVERSION
@ ELI_ABIVERSION
ABI version.
Definition
ELF/Header.hpp:51
LIEF::ELF::Header::section_header_size
void section_header_size(uint32_t size)
Definition
ELF/Header.hpp:268
LIEF::ELF::Header::section_headers_offset
uint64_t section_headers_offset() const
Offset of the sections table.
Definition
ELF/Header.hpp:146
LIEF::ELF::Header::operator=
Header & operator=(const Header &)=default
LIEF::ELF::Header::identity_os_abi
void identity_os_abi(OS_ABI osabi)
Definition
ELF/Header.hpp:294
LIEF::ELF::Header::has
bool has(PROCESSOR_FLAGS flag) const
LIEF::ELF::Header::object_file_version
void object_file_version(VERSION version)
Definition
ELF/Header.hpp:237
LIEF::ELF::Header::header_size
uint32_t header_size() const
Size of the current header (i.e. sizeof(Elfxx_Ehdr)) This size should be 64 for an ELF64 binary and 5...
Definition
ELF/Header.hpp:157
LIEF::ELF::Header::identity_os_abi
OS_ABI identity_os_abi() const
Identifies the version of the ABI for which the object is prepared.
Definition
ELF/Header.hpp:216
LIEF::ELF::Header::processor_flag
void processor_flag(uint32_t flags)
Definition
ELF/Header.hpp:253
LIEF::ELF::Header::section_name_table_idx
uint32_t section_name_table_idx() const
Return the section's index which contains sections' names.
Definition
ELF/Header.hpp:187
LIEF::ELF::Header::machine_type
ARCH machine_type() const
Target architecture.
Definition
ELF/Header.hpp:126
LIEF::ELF::Header::Parser
friend class Parser
Definition
ELF/Header.hpp:36
LIEF::ELF::Header::numberof_sections
void numberof_sections(uint32_t n)
Definition
ELF/Header.hpp:272
LIEF::ELF::Header::entrypoint
void entrypoint(uint64_t entry)
Definition
ELF/Header.hpp:241
LIEF::ELF::Header::identity_abi_version
uint32_t identity_abi_version() const
ABI Version.
Definition
ELF/Header.hpp:221
LIEF::ELF::Header::numberof_segments
void numberof_segments(uint32_t n)
Definition
ELF/Header.hpp:265
LIEF::ELF::Header::identity_class
void identity_class(CLASS cls)
Definition
ELF/Header.hpp:282
LIEF::ELF::Header::file_type
FILE_TYPE file_type() const
Define the object file type. (e.g. executable, library...).
Definition
ELF/Header.hpp:121
LIEF::ELF::Header::program_header_size
void program_header_size(uint32_t size)
Definition
ELF/Header.hpp:261
LIEF::ELF::Header::identity_version
void identity_version(VERSION version)
Definition
ELF/Header.hpp:290
LIEF::ELF::Header::file_type
void file_type(FILE_TYPE type)
Definition
ELF/Header.hpp:229
LIEF::ELF::Header::OS_ABI
OS_ABI
Match the result Elfxx_Ehdr.e_ident[EI_OSABI].
Definition
ELF/Header.hpp:80
LIEF::ELF::Header::CLASS
CLASS
Match the result of Elfxx_Ehdr.e_ident[EI_CLASS].
Definition
ELF/Header.hpp:73
LIEF::ELF::Header::section_name_table_idx
void section_name_table_idx(uint32_t idx)
Definition
ELF/Header.hpp:275
LIEF::ELF::Header::object_file_version
VERSION object_file_version() const
Version of the object file format.
Definition
ELF/Header.hpp:131
LIEF::ELF::Header::section_header_size
uint32_t section_header_size() const
Return the size of a section header (i.e. sizeof(Elfxx_Shdr)) This size should be 64 for a ELF64 bina...
Definition
ELF/Header.hpp:174
LIEF::ELF::Header::identity_abi_version
void identity_abi_version(uint8_t version)
Definition
ELF/Header.hpp:298
LIEF::ELF::Parser
Class which parses and transforms an ELF file into a ELF::Binary object.
Definition
ELF/Parser.hpp:45
LIEF::Object::Object
Object()
LIEF::Visitor
Definition
Visitor.hpp:210
LIEF::ELF
Namespace related to the LIEF's ELF module.
Definition
Abstract/Header.hpp:28
LIEF::ELF::to_string
const char * to_string(DynamicEntry::TAG e)
LIEF::ELF::ARCH
ARCH
Definition
ELF/enums.hpp:30
LIEF::ELF::ARCH::ARM
@ ARM
Definition
ELF/enums.hpp:54
LIEF::ELF::ARCH::NONE
@ NONE
Definition
ELF/enums.hpp:31
LIEF::ELF::PROCESSOR_FLAGS
PROCESSOR_FLAGS
Definition
ProcessorFlags.hpp:32
LIEF
LIEF namespace.
Definition
Abstract/Binary.hpp:40
LIEF::version
lief_version_t version()
Return the current version.
visibility.h
LIEF_API
#define LIEF_API
Definition
visibility.h:41
LIEF_LOCAL
#define LIEF_LOCAL
Definition
visibility.h:42
Generated by
1.17.0