LIEF: Library to Instrument Executable Formats Version 0.16.0
|
Loading...
Searching...
No Matches
Go to the documentation of this file.
16#ifndef LIEF_PE_SECTION_H
17#define LIEF_PE_SECTION_H
51 static constexpr size_t MAX_SECTION_NAME = 8;
53 enum class CHARACTERISTICS: uint64_t {
54 TYPE_NO_PAD = 0x00000008,
55 CNT_CODE = 0x00000020,
56 CNT_INITIALIZED_DATA = 0x00000040,
57 CNT_UNINITIALIZED_DATA = 0x00000080,
58 LNK_OTHER = 0x00000100,
59 LNK_INFO = 0x00000200,
60 LNK_REMOVE = 0x00000800,
61 LNK_COMDAT = 0x00001000,
63 MEM_PURGEABLE = 0x00010000,
64 MEM_16BIT = 0x00020000,
65 MEM_LOCKED = 0x00040000,
66 MEM_PRELOAD = 0x00080000,
67 ALIGN_1BYTES = 0x00100000,
68 ALIGN_2BYTES = 0x00200000,
69 ALIGN_4BYTES = 0x00300000,
70 ALIGN_8BYTES = 0x00400000,
71 ALIGN_16BYTES = 0x00500000,
72 ALIGN_32BYTES = 0x00600000,
73 ALIGN_64BYTES = 0x00700000,
74 ALIGN_128BYTES = 0x00800000,
75 ALIGN_256BYTES = 0x00900000,
76 ALIGN_512BYTES = 0x00A00000,
77 ALIGN_1024BYTES = 0x00B00000,
78 ALIGN_2048BYTES = 0x00C00000,
79 ALIGN_4096BYTES = 0x00D00000,
80 ALIGN_8192BYTES = 0x00E00000,
81 LNK_NRELOC_OVFL = 0x01000000,
82 MEM_DISCARDABLE = 0x02000000,
83 MEM_NOT_CACHED = 0x04000000,
84 MEM_NOT_PAGED = 0x08000000,
85 MEM_SHARED = 0x10000000,
86 MEM_EXECUTE = 0x20000000,
87 MEM_READ = 0x40000000,
88 MEM_WRITE = 0x80000000
91 Section(
const details::pe_section& header);
94 const std::string& name =
"", uint32_t characteristics = 0);
108 return virtual_size_;
110 span<const uint8_t>
content()
const override {
115 span<const uint8_t>
padding()
const {
130 return pointer_to_relocations_;
137 return pointer_to_linenumbers_;
142 return number_of_relocations_;
147 return number_of_linenumbers_;
154 return characteristics_;
156 bool is_type(PE_SECTION_TYPES type)
const;
159 const std::set<PE_SECTION_TYPES>&
types()
const;
165 return (characteristics() &
static_cast<size_t>(c)) > 0;
170 void clear(uint8_t c);
173 void content(
const std::vector<uint8_t>& data)
override;
175 void name(std::string name)
override;
178 virtual_size_ = virtual_sz;
184 pointer_to_relocations_ = ptr;
188 pointer_to_linenumbers_ = ptr;
192 number_of_relocations_ = nb;
196 number_of_linenumbers_ = nb;
202 characteristics_ = characteristics;
205 void type(PE_SECTION_TYPES type);
210 characteristics_ &= ~static_cast<size_t>(characteristic);
215 characteristics_ |=
static_cast<size_t>(characteristic);
219 std::unique_ptr<SpanStream>
stream()
const;
221 void accept(Visitor& visitor)
const override;
226 span<uint8_t> writable_content() {
230 std::vector<uint8_t> content_;
231 std::vector<uint8_t> padding_;
232 uint32_t virtual_size_ = 0;
233 uint32_t pointer_to_relocations_ = 0;
234 uint32_t pointer_to_linenumbers_ = 0;
235 uint16_t number_of_relocations_ = 0;
236 uint16_t number_of_linenumbers_ = 0;
237 uint32_t characteristics_ = 0;
238 std::set<PE_SECTION_TYPES> types_ = {PE_SECTION_TYPES::UNKNOWN};
Class which represents a PE binary This is the main interface to manage and modify a PE executable.
Definition PE/Binary.hpp:52
Class that is used to rebuild a raw PE binary from a PE::Binary object.
Definition PE/Builder.hpp:45
Main interface to parse PE binaries. In particular the static functions: Parser::parse should be used...
Definition PE/Parser.hpp:47
Class which represents a PE section.
Definition PE/Section.hpp:43
void type(PE_SECTION_TYPES type)
void sizeof_raw_data(uint32_t sizeOfRawData)
Section(const Section &)=default
uint32_t pointerto_line_numbers() const
The file pointer to the beginning of line-number entries for the section. This is set to zero if ther...
Definition PE/Section.hpp:136
uint32_t pointerto_relocation() const
The file pointer to the beginning of the COFF relocation entries for the section. This is set to zero...
Definition PE/Section.hpp:129
Section & remove_characteristic(CHARACTERISTICS characteristic)
Definition PE/Section.hpp:209
const std::set< PE_SECTION_TYPES > & types() const
Deprecated do not use. It will likely change in a future release of LIEF.
friend std::ostream & operator<<(std::ostream &os, const Section §ion)
Section & operator=(const Section &)=default
bool has_characteristic(CHARACTERISTICS c) const
Check if the section has the given CHARACTERISTICS.
Definition PE/Section.hpp:164
uint16_t numberof_line_numbers() const
No longer used in recent PE binaries produced by Visual Studio.
Definition PE/Section.hpp:146
Section(const std::vector< uint8_t > &data, const std::string &name="", uint32_t characteristics=0)
~Section() override=default
CHARACTERISTICS
Definition PE/Section.hpp:53
span< const uint8_t > content() const override
The actual content of the section.
Definition PE/Section.hpp:112
void clear(uint8_t c)
Fill the content of the section with the given char
void pointerto_raw_data(uint32_t ptr)
std::vector< CHARACTERISTICS > characteristics_list() const
List of the section characteristics as a std::set.
uint32_t characteristics() const
Characteristics of the section: it provides information about the permissions of the section when map...
Definition PE/Section.hpp:153
void name(std::string name) override
Change the section's name.
Section(const std::string &name)
void pointerto_relocation(uint32_t ptr)
Definition PE/Section.hpp:183
uint32_t sizeof_raw_data() const
Return the size of the data in the section.
span< const uint8_t > padding() const
Content of the section's padding area.
Definition PE/Section.hpp:117
void pointerto_line_numbers(uint32_t ptr)
Definition PE/Section.hpp:187
std::unique_ptr< SpanStream > stream() const
void characteristics(uint32_t characteristics)
Definition PE/Section.hpp:201
void virtual_size(uint32_t virtual_sz)
Definition PE/Section.hpp:177
void content(const std::vector< uint8_t > &data) override
Change section content.
uint32_t pointerto_raw_data() const
The offset of the section data in the PE file.
void add_type(PE_SECTION_TYPES type)
void remove_type(PE_SECTION_TYPES type)
void numberof_line_numbers(uint16_t nb)
Definition PE/Section.hpp:195
Section(const details::pe_section &header)
uint16_t numberof_relocations() const
No longer used in recent PE binaries produced by Visual Studio.
Definition PE/Section.hpp:141
bool is_type(PE_SECTION_TYPES type) const
Deprecated do not use. It will likely change in a future release of LIEF.
void accept(Visitor &visitor) const override
uint32_t virtual_size() const
Return the size of the data when mapped in memory.
Definition PE/Section.hpp:107
Section & add_characteristic(CHARACTERISTICS characteristic)
Definition PE/Section.hpp:214
void numberof_relocations(uint16_t nb)
Definition PE/Section.hpp:191
virtual std::string name() const
section's name
Definition Abstract/Section.hpp:44
Definition SpanStream.hpp:32
#define ENABLE_BITMASK_OPERATORS(X)
Definition enums.hpp:24
Definition CodeIntegrity.hpp:26
Namespace related to the LIEF's PE module.
Definition Abstract/Header.hpp:32
const char * to_string(DataDirectory::TYPES e)
LIEF namespace.
Definition Abstract/Binary.hpp:36
#define LIEF_API
Definition visibility.h:41