LIEF: Library to Instrument Executable Formats Version 0.17.0
Loading...
Searching...
No Matches
AuxiliarySectionDefinition.hpp
Go to the documentation of this file.
1/* Copyright 2017 - 2025 R. Thomas
2 * Copyright 2017 - 2025 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 {
31 public:
32 LIEF_LOCAL static std::unique_ptr<AuxiliarySectionDefinition>
33 parse(const std::vector<uint8_t>& payload);
34
36 AuxiliarySymbol(AuxiliarySymbol::TYPE::SEC_DEF)
37 {}
38
39 AuxiliarySectionDefinition(uint32_t length, uint16_t nb_relocs,
40 uint16_t nb_lines, uint32_t checksum,
41 uint32_t sec_idx, uint8_t selection,
42 uint8_t reserved) :
43 AuxiliarySymbol(AuxiliarySymbol::TYPE::SEC_DEF),
44 length_(length),
45 nb_relocs_(nb_relocs),
46 nb_lines_(nb_lines),
47 checksum_(checksum),
48 sec_idx_(sec_idx),
49 selection_((COMDAT_SELECTION)selection),
50 reserved_(reserved)
51 {}
52
53 AuxiliarySectionDefinition(const AuxiliarySectionDefinition&) = default;
54 AuxiliarySectionDefinition& operator=(const AuxiliarySectionDefinition&) = default;
55
56 AuxiliarySectionDefinition(AuxiliarySectionDefinition&&) = default;
57 AuxiliarySectionDefinition& operator=(AuxiliarySectionDefinition&&) = default;
58
59 std::unique_ptr<AuxiliarySymbol> clone() const override {
60 return std::unique_ptr<AuxiliarySectionDefinition>(new AuxiliarySectionDefinition{*this});
61 }
62 enum class COMDAT_SELECTION : uint8_t {
67 NONE = 0,
68 NODUPLICATES = 1,
72 ANY,
76 SAME_SIZE,
81 EXACT_MATCH,
86 ASSOCIATIVE,
99 LARGEST
104 };
105 uint32_t length() const {
108 return length_;
109 }
110 uint16_t nb_relocs() const {
113 return nb_relocs_;
114 }
115 uint16_t nb_line_numbers() const {
118 return nb_lines_;
119 }
120 uint32_t checksum() const {
124 return checksum_;
125 }
126 uint32_t section_idx() const {
130 return sec_idx_;
131 }
132 COMDAT_SELECTION selection() const {
136 return selection_;
137 }
138 uint8_t reserved() const {
141 return reserved_;
142 }
143
144 std::string to_string() const override;
145
146 static bool classof(const AuxiliarySymbol* sym) {
147 return sym->type() == AuxiliarySymbol::TYPE::SEC_DEF;
148 }
149
150 ~AuxiliarySectionDefinition() override = default;
151
152 private:
153 uint32_t length_ = 0;
154 uint16_t nb_relocs_ = 0;
155 uint16_t nb_lines_ = 0;
156 uint32_t checksum_ = 0;
157 uint32_t sec_idx_ = 0;
158 COMDAT_SELECTION selection_ = COMDAT_SELECTION::NONE;
159 uint8_t reserved_ = 0;
160};
161
162LIEF_API const char* to_string(AuxiliarySectionDefinition::COMDAT_SELECTION e);
163
164}
165}
166#endif
AuxiliarySymbol.hpp
LIEF::COFF::AuxiliarySectionDefinition
This auxiliary symbol exposes information about the associated section.
Definition AuxiliarySectionDefinition.hpp:30
LIEF::COFF::AuxiliarySectionDefinition::operator=
AuxiliarySectionDefinition & operator=(const AuxiliarySectionDefinition &)=default
LIEF::COFF::AuxiliarySectionDefinition::checksum
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:123
LIEF::COFF::AuxiliarySectionDefinition::AuxiliarySectionDefinition
AuxiliarySectionDefinition()
Definition AuxiliarySectionDefinition.hpp:35
LIEF::COFF::AuxiliarySectionDefinition::parse
static std::unique_ptr< AuxiliarySectionDefinition > parse(const std::vector< uint8_t > &payload)
LIEF::COFF::AuxiliarySectionDefinition::classof
static bool classof(const AuxiliarySymbol *sym)
Definition AuxiliarySectionDefinition.hpp:146
LIEF::COFF::AuxiliarySectionDefinition::section_idx
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:129
LIEF::COFF::AuxiliarySectionDefinition::length
uint32_t length() const
The size of section data. The same as SizeOfRawData in the section header.
Definition AuxiliarySectionDefinition.hpp:107
LIEF::COFF::AuxiliarySectionDefinition::COMDAT_SELECTION
COMDAT_SELECTION
Values for the AuxiliarySectionDefinition::selection attribute.
Definition AuxiliarySectionDefinition.hpp:66
LIEF::COFF::AuxiliarySectionDefinition::operator=
AuxiliarySectionDefinition & operator=(AuxiliarySectionDefinition &&)=default
LIEF::COFF::AuxiliarySectionDefinition::nb_line_numbers
uint16_t nb_line_numbers() const
The number of line-number entries for the section.
Definition AuxiliarySectionDefinition.hpp:117
LIEF::COFF::AuxiliarySectionDefinition::selection
COMDAT_SELECTION selection() const
The COMDAT selection number. This is applicable if the section is a COMDAT section.
Definition AuxiliarySectionDefinition.hpp:135
LIEF::COFF::AuxiliarySectionDefinition::~AuxiliarySectionDefinition
~AuxiliarySectionDefinition() override=default
LIEF::COFF::AuxiliarySectionDefinition::AuxiliarySectionDefinition
AuxiliarySectionDefinition(AuxiliarySectionDefinition &&)=default
LIEF::COFF::AuxiliarySectionDefinition::reserved
uint8_t reserved() const
Reserved value (should be 0)
Definition AuxiliarySectionDefinition.hpp:140
LIEF::COFF::AuxiliarySectionDefinition::clone
std::unique_ptr< AuxiliarySymbol > clone() const override
Definition AuxiliarySectionDefinition.hpp:59
LIEF::COFF::AuxiliarySectionDefinition::AuxiliarySectionDefinition
AuxiliarySectionDefinition(const AuxiliarySectionDefinition &)=default
LIEF::COFF::AuxiliarySectionDefinition::AuxiliarySectionDefinition
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:39
LIEF::COFF::AuxiliarySectionDefinition::to_string
std::string to_string() const override
LIEF::COFF::AuxiliarySectionDefinition::nb_relocs
uint16_t nb_relocs() const
The number of relocation entries for the section.
Definition AuxiliarySectionDefinition.hpp:112
LIEF::COFF::AuxiliarySymbol
Class that represents an auxiliary symbol.
Definition AuxiliarySymbol.hpp:36
LIEF::COFF::AuxiliarySymbol::type
TYPE type() const
Definition AuxiliarySymbol.hpp:78
LIEF::COFF
Definition AuxiliarySymbol.hpp:29
LIEF::COFF::to_string
const char * to_string(AuxiliarySectionDefinition::COMDAT_SELECTION e)
LIEF
LIEF namespace.
Definition Abstract/Binary.hpp:39
visibility.h
LIEF_API
#define LIEF_API
Definition visibility.h:41
LIEF_LOCAL
#define LIEF_LOCAL
Definition visibility.h:42