LIEF: Library to Instrument Executable Formats Version 0.16.0
|
Class which represents the ELF segments. More...
#include <Segment.hpp>
Public Types | |
enum class | TYPE : uint64_t { UNKNOWN = uint64_t(-1) , PT_NULL_ = 0 , LOAD = 1 , DYNAMIC = 2 , INTERP = 3 , NOTE = 4 , SHLIB = 5 , PHDR = 6 , TLS = 7 , GNU_EH_FRAME = 0x6474e550 , GNU_STACK = 0x6474e551 , GNU_PROPERTY = 0x6474e553 , GNU_RELRO = 0x6474e552 , ARM_ARCHEXT = 0x70000000 | PT_ARM , ARM_EXIDX = 0x70000001 | PT_ARM , AARCH64_MEMTAG_MTE = 0x70000002 | PT_AARCH64 , MIPS_REGINFO = 0x70000000 | PT_MIPS , MIPS_RTPROC = 0x70000001 | PT_MIPS , MIPS_OPTIONS = 0x70000002 | PT_MIPS , MIPS_ABIFLAGS = 0x70000003 | PT_MIPS , RISCV_ATTRIBUTES = 0x70000003 | PT_RISCV } |
enum class | FLAGS { NONE = 0 , X = 1 , W = 2 , R = 4 } |
using | sections_t = std::vector<Section*> |
using | it_sections = ref_iterator<sections_t&> |
using | it_const_sections = const_ref_iterator<const sections_t&> |
Public Types inherited from LIEF::Object | |
template<class T > | |
using | output_t = add_pointer_t<decay_t<T>> |
template<class T > | |
using | output_const_t = add_pointer_t<add_const_t<decay_t<T>>> |
Public Member Functions | |
Segment ()=default | |
~Segment () override=default | |
Segment & | operator= (Segment other) |
Segment (const Segment &other) | |
Segment & | operator= (Segment &&)=default |
Segment (Segment &&)=default | |
void | swap (Segment &other) |
bool | is_load () const |
bool | is_interpreter () const |
bool | is_phdr () const |
TYPE | type () const |
The segment's type (LOAD, DYNAMIC, ...) | |
FLAGS | flags () const |
The flag permissions associated with this segment. | |
uint64_t | file_offset () const |
The file offset of the data associated with this segment. | |
uint64_t | virtual_address () const |
The virtual address of the segment. | |
uint64_t | physical_address () const |
The physical address of the segment. This value is not really relevant on systems like Linux or Android. On the other hand, Qualcomm trustlets might use this value. | |
uint64_t | physical_size () const |
The file size of the data associated with this segment. | |
uint64_t | virtual_size () const |
The in-memory size of this segment. Usually, if the .bss segment is wrapped by this segment then, virtual_size is larger than physical_size. | |
uint64_t | alignment () const |
The offset alignment of the segment. | |
span< const uint8_t > | content () const |
The raw data associated with this segment. | |
bool | has (FLAGS flag) const |
Check if the current segment has the given flag. | |
bool | has (const Section §ion) const |
Check if the current segment wraps the given ELF::Section. | |
bool | has (const std::string §ion_name) const |
Check if the current segment wraps the given section's name. | |
void | add (FLAGS flag) |
Append the given ELF_SEGMENT_FLAGS. | |
void | remove (FLAGS flag) |
Remove the given ELF_SEGMENT_FLAGS. | |
void | type (TYPE type) |
void | flags (FLAGS flags) |
void | flags (uint32_t flags) |
void | clear_flags () |
void | file_offset (uint64_t file_offset) |
void | virtual_address (uint64_t virtual_address) |
void | physical_address (uint64_t physical_address) |
void | physical_size (uint64_t physical_size) |
void | virtual_size (uint64_t virtual_size) |
void | alignment (uint64_t alignment) |
void | content (std::vector< uint8_t > content) |
template<typename T > | |
T | get_content_value (size_t offset) const |
template<typename T > | |
void | set_content_value (size_t offset, T value) |
size_t | get_content_size () const |
it_sections | sections () |
Iterator over the sections wrapped by this segment. | |
it_const_sections | sections () const |
std::unique_ptr< SpanStream > | stream () const |
void | accept (Visitor &visitor) const override |
Segment & | operator+= (FLAGS flag) |
Segment & | operator-= (FLAGS flag) |
Public Member Functions inherited from LIEF::Object | |
Object () | |
Object (const Object &other) | |
Object & | operator= (const Object &other) |
template<class T > | |
output_t< T > | as () |
template<class T > | |
output_const_t< T > | as () const |
virtual bool | operator== (const Object &other) const |
virtual bool | operator!= (const Object &other) const |
virtual | ~Object () |
Static Public Member Functions | |
static TYPE | type_from (uint64_t value, ARCH arch) |
static uint64_t | to_value (TYPE type) |
static result< Segment > | from_raw (const uint8_t *ptr, size_t size) |
static result< Segment > | from_raw (const std::vector< uint8_t > &raw) |
Static Public Attributes | |
static constexpr uint64_t | PT_BIT = 33 |
static constexpr uint64_t | PT_MASK = (uint64_t(1) << PT_BIT) - 1 |
static constexpr uint64_t | PT_ARM = uint64_t(1) << PT_BIT |
static constexpr uint64_t | PT_AARCH64 = uint64_t(2) << PT_BIT |
static constexpr uint64_t | PT_MIPS = uint64_t(3) << PT_BIT |
static constexpr uint64_t | PT_RISCV = uint64_t(4) << PT_BIT |
Class which represents the ELF segments.
using LIEF::ELF::Segment::it_const_sections = const_ref_iterator<const sections_t&> |
using LIEF::ELF::Segment::sections_t = std::vector<Section*> |
|
strong |
|
strong |
|
default |
|
overridedefault |
LIEF::ELF::Segment::Segment | ( | const Segment & | other | ) |
|
default |
|
overridevirtual |
Implements LIEF::Object.
void LIEF::ELF::Segment::add | ( | FLAGS | flag | ) |
Append the given ELF_SEGMENT_FLAGS.
|
inline |
The offset alignment of the segment.
|
inline |
|
inline |
span< const uint8_t > LIEF::ELF::Segment::content | ( | ) | const |
The raw data associated with this segment.
void LIEF::ELF::Segment::content | ( | std::vector< uint8_t > | content | ) |
|
inline |
The file offset of the data associated with this segment.
void LIEF::ELF::Segment::file_offset | ( | uint64_t | file_offset | ) |
|
inline |
The flag permissions associated with this segment.
|
inline |
|
inline |
|
inlinestatic |
size_t LIEF::ELF::Segment::get_content_size | ( | ) | const |
T LIEF::ELF::Segment::get_content_value | ( | size_t | offset | ) | const |
bool LIEF::ELF::Segment::has | ( | const Section & | section | ) | const |
Check if the current segment wraps the given ELF::Section.
bool LIEF::ELF::Segment::has | ( | const std::string & | section_name | ) | const |
Check if the current segment wraps the given section's name.
|
inline |
Check if the current segment has the given flag.
|
inline |
|
inline |
|
inline |
|
inline |
The physical address of the segment. This value is not really relevant on systems like Linux or Android. On the other hand, Qualcomm trustlets might use this value.
Usually this value matches virtual_address
|
inline |
|
inline |
The file size of the data associated with this segment.
void LIEF::ELF::Segment::physical_size | ( | uint64_t | physical_size | ) |
void LIEF::ELF::Segment::remove | ( | FLAGS | flag | ) |
Remove the given ELF_SEGMENT_FLAGS.
|
inline |
Iterator over the sections wrapped by this segment.
|
inline |
void LIEF::ELF::Segment::set_content_value | ( | size_t | offset, |
T | value ) |
std::unique_ptr< SpanStream > LIEF::ELF::Segment::stream | ( | ) | const |
void LIEF::ELF::Segment::swap | ( | Segment & | other | ) |
|
inlinestatic |
|
inline |
The segment's type (LOAD, DYNAMIC, ...)
|
inline |
|
inline |
The virtual address of the segment.
|
inline |
|
inline |
The in-memory size of this segment. Usually, if the .bss
segment is wrapped by this segment then, virtual_size is larger than physical_size.
|
inline |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |