LIEF: Library to Instrument Executable Formats Version 0.17.0
Loading...
Searching...
No Matches
FunctionOverride.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_PE_LOAD_CONFIGURATION_DYNAMIC_RELOCATION_FUNC_OVERRIDE_H
17#define LIEF_PE_LOAD_CONFIGURATION_DYNAMIC_RELOCATION_FUNC_OVERRIDE_H
18
19#include <memory>
20#include <string>
21
22#include "LIEF/visibility.h"
23#include "LIEF/errors.hpp"
24#include "LIEF/iterators.hpp"
26
27namespace LIEF {
28class SpanStream;
29
30namespace PE {
31class Parser;
36 public:
37 struct image_bdd_dynamic_relocation_t {
40 uint16_t left = 0;
41 uint16_t right = 0;
42 uint32_t value = 0;
43 };
44 struct image_bdd_info_t {
47 uint32_t version = 0;
48 uint32_t original_size = 0;
49 uint32_t original_offset = 0;
50 std::vector<image_bdd_dynamic_relocation_t> relocations;
53 std::vector<uint8_t> payload;
56 };
57
58 using func_overriding_info_t = std::vector<std::unique_ptr<FunctionOverrideInfo>>;
59 using it_func_overriding_info = ref_iterator<func_overriding_info_t&, FunctionOverrideInfo*>;
60 using it_const_func_overriding_info = const_ref_iterator<const func_overriding_info_t&, const FunctionOverrideInfo*>;
61
62 using bdd_info_list_t = std::vector<image_bdd_info_t>;
63 using it_bdd_info = ref_iterator<bdd_info_list_t&>;
64 using it_const_bdd_info = const_ref_iterator<const bdd_info_list_t&>;
65
66 FunctionOverride();
67
68 FunctionOverride(const FunctionOverride&);
69 FunctionOverride& operator=(const FunctionOverride&);
70
71 FunctionOverride(FunctionOverride&&);
72 FunctionOverride& operator=(FunctionOverride&&);
73
74 std::unique_ptr<DynamicFixup> clone() const override {
75 return std::unique_ptr<FunctionOverride>(new FunctionOverride(*this));
76 }
77 it_func_overriding_info func_overriding_info() {
80 return overriding_info_;
81 }
82
83 it_const_func_overriding_info func_overriding_info() const {
84 return overriding_info_;
85 }
86 it_bdd_info bdd_info() {
89 return bdd_info_;
90 }
91
92 it_const_bdd_info bdd_info() const {
93 return bdd_info_;
94 }
95 image_bdd_info_t* find_bdd_info(uint32_t offset);
98 image_bdd_info_t* find_bdd_info(const FunctionOverrideInfo& info);
101
102 const image_bdd_info_t* find_bdd_info(uint32_t offset) const {
103 return const_cast<FunctionOverride*>(this)->find_bdd_info(offset);
104 }
105
106 const image_bdd_info_t* find_bdd_info(const FunctionOverrideInfo& info) const {
107 return const_cast<FunctionOverride*>(this)->find_bdd_info(info);
108 }
109
110 static bool classof(const DynamicFixup* fixup) {
111 return fixup->kind() == DynamicFixup::KIND::FUNCTION_OVERRIDE;
112 }
113
114 std::string to_string() const override;
115
116 ~FunctionOverride() override;
117 LIEF_LOCAL static
120 std::unique_ptr<FunctionOverride> parse(Parser& ctx, SpanStream& strm);
121 LIEF_LOCAL static ok_error_t
124 parse_override_info(Parser& ctx, SpanStream& strm, FunctionOverride& func);
125 LIEF_LOCAL static ok_error_t
128 parse_bdd_info(Parser& ctx, SpanStream& strm, FunctionOverride& func);
129
130 private:
131 func_overriding_info_t overriding_info_;
132 std::vector<image_bdd_info_t> bdd_info_;
133};
134
135}
136}
137
138#endif
DynamicFixup.hpp
LIEF::PE::DynamicFixup
This is the base class for any fixups located in DynamicRelocation.
Definition DynamicFixup.hpp:34
LIEF::PE::DynamicFixup::kind
KIND kind() const
Encoding of the fixups.
Definition DynamicFixup.hpp:73
LIEF::PE::FunctionOverrideInfo
Definition FunctionOverrideInfo.hpp:33
LIEF::PE::FunctionOverride
This class represents IMAGE_DYNAMIC_RELOCATION_FUNCTION_OVERRIDE
Definition FunctionOverride.hpp:35
LIEF::PE::FunctionOverride::func_overriding_info
it_const_func_overriding_info func_overriding_info() const
Definition FunctionOverride.hpp:83
LIEF::PE::FunctionOverride::~FunctionOverride
~FunctionOverride() override
LIEF::PE::FunctionOverride::clone
std::unique_ptr< DynamicFixup > clone() const override
Definition FunctionOverride.hpp:74
LIEF::PE::FunctionOverride::to_string
std::string to_string() const override
LIEF::PE::FunctionOverride::FunctionOverride
FunctionOverride(const FunctionOverride &)
LIEF::PE::FunctionOverride::func_overriding_info
it_func_overriding_info func_overriding_info()
Iterator over the overriding info.
Definition FunctionOverride.hpp:79
LIEF::PE::FunctionOverride::operator=
FunctionOverride & operator=(const FunctionOverride &)
LIEF::PE::FunctionOverride::find_bdd_info
image_bdd_info_t * find_bdd_info(const FunctionOverrideInfo &info)
Find the IMAGE_BDD_INFO associated with the given info.
LIEF::PE::FunctionOverride::bdd_info
it_const_bdd_info bdd_info() const
Definition FunctionOverride.hpp:92
LIEF::PE::FunctionOverride::classof
static bool classof(const DynamicFixup *fixup)
Definition FunctionOverride.hpp:110
LIEF::PE::FunctionOverride::find_bdd_info
const image_bdd_info_t * find_bdd_info(const FunctionOverrideInfo &info) const
Definition FunctionOverride.hpp:106
LIEF::PE::FunctionOverride::FunctionOverride
FunctionOverride(FunctionOverride &&)
LIEF::PE::FunctionOverride::operator=
FunctionOverride & operator=(FunctionOverride &&)
LIEF::PE::FunctionOverride::bdd_info
it_bdd_info bdd_info()
Iterator over the BDD info.
Definition FunctionOverride.hpp:88
LIEF::PE::FunctionOverride::find_bdd_info
const image_bdd_info_t * find_bdd_info(uint32_t offset) const
Definition FunctionOverride.hpp:102
LIEF::PE::FunctionOverride::FunctionOverride
FunctionOverride()
LIEF::PE::FunctionOverride::find_bdd_info
image_bdd_info_t * find_bdd_info(uint32_t offset)
Find the IMAGE_BDD_INFO at the given offset.
LIEF::PE::Parser
Main interface to parse PE binaries. In particular the static functions: Parser::parse should be used...
Definition PE/Parser.hpp:52
LIEF::SpanStream
Definition SpanStream.hpp:32
errors.hpp
iterators.hpp
LIEF::PE
Namespace related to the LIEF's PE module.
Definition Abstract/Header.hpp:32
LIEF
LIEF namespace.
Definition Abstract/Binary.hpp:36
LIEF::ok_error_t
result< ok_t > ok_error_t
Opaque structure that is used by LIEF to avoid writing result<void> f(...). Instead,...
Definition errors.hpp:109
visibility.h
LIEF_API
#define LIEF_API
Definition visibility.h:41
LIEF_LOCAL
#define LIEF_LOCAL
Definition visibility.h:42