LIEF: Library to Instrument Executable Formats Version 1.0.0
Loading...
Searching...
No Matches
AuxiliarySectionDefinition.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_COFF_AUXILIARY_SEC_DEF_H
17#define LIEF_COFF_AUXILIARY_SEC_DEF_H
18
19#include <memory>
20
21#include "LIEF/visibility.h"
23
24namespace LIEF {
25namespace COFF {
26
31 public:
32 LIEF_LOCAL static std::unique_ptr<AuxiliarySectionDefinition>
33 parse(const std::vector<uint8_t>& payload);
34
37
39 uint16_t nb_lines, uint32_t checksum,
40 uint32_t sec_idx, uint8_t selection,
41 uint8_t reserved) :
43 length_(length),
44 nb_relocs_(nb_relocs),
45 nb_lines_(nb_lines),
46 checksum_(checksum),
47 sec_idx_(sec_idx),
48 selection_((COMDAT_SELECTION)selection),
49 reserved_(reserved) {}
50
54
57
58 std::unique_ptr<AuxiliarySymbol> clone() const override {
59 return std::unique_ptr<AuxiliarySectionDefinition>(
61 );
62 }
63
68 enum class COMDAT_SELECTION : uint8_t {
69 NONE = 0,
70
73 NODUPLICATES = 1,
74
77 ANY,
78
82 SAME_SIZE,
83
87 EXACT_MATCH,
88
100 ASSOCIATIVE,
101
105 LARGEST,
106 };
107
109 uint32_t length() const {
110 return length_;
111 }
112
114 uint16_t nb_relocs() const {
115 return nb_relocs_;
116 }
117
119 uint16_t nb_line_numbers() const {
120 return nb_lines_;
121 }
122
125 uint32_t checksum() const {
126 return checksum_;
127 }
128
131 uint32_t section_idx() const {
132 return sec_idx_;
133 }
134
138 return selection_;
139 }
140
142 uint8_t reserved() const {
143 return reserved_;
144 }
145
146 std::string to_string() const override;
147
148 static bool classof(const AuxiliarySymbol* sym) {
149 return sym->type() == AuxiliarySymbol::TYPE::SEC_DEF;
150 }
151
152 ~AuxiliarySectionDefinition() override = default;
153
154 private:
155 uint32_t length_ = 0;
156 uint16_t nb_relocs_ = 0;
157 uint16_t nb_lines_ = 0;
158 uint32_t checksum_ = 0;
159 uint32_t sec_idx_ = 0;
161 uint8_t reserved_ = 0;
162};
163
165
166}
167}
168#endif
AuxiliarySectionDefinition & operator=(const AuxiliarySectionDefinition &)=default
uint32_t checksum() const
The checksum for communal data. It is applicable if the IMAGE_SCN_LNK_COMDAT flag is set in the secti...
Definition AuxiliarySectionDefinition.hpp:125
AuxiliarySectionDefinition()
Definition AuxiliarySectionDefinition.hpp:35
static std::unique_ptr< AuxiliarySectionDefinition > parse(const std::vector< uint8_t > &payload)
static bool classof(const AuxiliarySymbol *sym)
Definition AuxiliarySectionDefinition.hpp:148
uint32_t section_idx() const
One-based index into the section table for the associated section. This is used when the COMDAT selec...
Definition AuxiliarySectionDefinition.hpp:131
uint32_t length() const
The size of section data. The same as SizeOfRawData in the section header.
Definition AuxiliarySectionDefinition.hpp:109
COMDAT_SELECTION
Values for the AuxiliarySectionDefinition::selection attribute.
Definition AuxiliarySectionDefinition.hpp:68
@ NONE
Definition AuxiliarySectionDefinition.hpp:69
AuxiliarySectionDefinition & operator=(AuxiliarySectionDefinition &&)=default
uint16_t nb_line_numbers() const
The number of line-number entries for the section.
Definition AuxiliarySectionDefinition.hpp:119
COMDAT_SELECTION selection() const
The COMDAT selection number. This is applicable if the section is a COMDAT section.
Definition AuxiliarySectionDefinition.hpp:137
~AuxiliarySectionDefinition() override=default
AuxiliarySectionDefinition(AuxiliarySectionDefinition &&)=default
uint8_t reserved() const
Reserved value (should be 0).
Definition AuxiliarySectionDefinition.hpp:142
std::unique_ptr< AuxiliarySymbol > clone() const override
Definition AuxiliarySectionDefinition.hpp:58
AuxiliarySectionDefinition(const AuxiliarySectionDefinition &)=default
AuxiliarySectionDefinition(uint32_t length, uint16_t nb_relocs, uint16_t nb_lines, uint32_t checksum, uint32_t sec_idx, uint8_t selection, uint8_t reserved)
Definition AuxiliarySectionDefinition.hpp:38
std::string to_string() const override
uint16_t nb_relocs() const
The number of relocation entries for the section.
Definition AuxiliarySectionDefinition.hpp:114
span< const uint8_t > payload() const
For unknown type only, return the raw representation of this symbol.
Definition AuxiliarySymbol.hpp:81
TYPE type() const
Definition AuxiliarySymbol.hpp:76
TYPE
Type discriminator for the subclasses.
Definition AuxiliarySymbol.hpp:56
@ SEC_DEF
Auxiliary Format 5: Section Definitions from the PE-COFF documentation.
Definition AuxiliarySymbol.hpp:68
Definition AuxiliarySymbol.hpp:29
const char * to_string(AuxiliarySectionDefinition::COMDAT_SELECTION e)
LIEF namespace.
Definition Abstract/Binary.hpp:40
#define LIEF_API
Definition visibility.h:43
#define LIEF_LOCAL
Definition visibility.h:44