LIEF: Library to Instrument Executable Formats Version 0.17.0
|
Loading...
Searching...
No Matches
Go to the documentation of this file.
16#ifndef LIEF_PE_RUNTIME_FUNCTION_X64_H
17#define LIEF_PE_RUNTIME_FUNCTION_X64_H
44 LIEF_LOCAL static std::unique_ptr<RuntimeFunctionX64>
47 parse(Parser& ctx, BinaryStream& strm,
bool skip_unwind =
false);
51 parse_unwind(Parser& ctx, BinaryStream& strm, RuntimeFunctionX64& func);
53 enum class UNWIND_FLAGS : uint8_t { EXCEPTION_HANDLER = 1, TERMINATE_HANDLER = 2,
65 enum class UNWIND_OPCODES : uint32_t { PUSH_NONVOL = 0,
134 enum class UNWIND_REG : uint32_t {
136 RCX, RDX, RBX, RSP, RBP, RSI, RDI, R8, R9, R10, R11, R12, R13, R14, R15,
143 using opcodes_t = std::vector<std::unique_ptr<unwind_x64::Code>>;
150 uint8_t sizeof_prologue = 0;
153 uint8_t count_opcodes = 0;
158 uint8_t frame_reg = 0;
164 uint8_t frame_reg_offset = 0;
168 std::vector<uint8_t> raw_opcodes;
172 optional<uint32_t> handler;
178 RuntimeFunctionX64* chained =
nullptr;
182 bool has(UNWIND_FLAGS flag)
const {
185 return (flags & (
int)flag) != 0;
195 std::ostream&
operator<<(std::ostream& os,
const unwind_info_t& info)
197 os << info.to_string();
203 ExceptionInfo(ARCH::X86_64, rva_start),
205 unwind_rva_(unwind_rva)
209 RuntimeFunctionX64&
operator=(
const RuntimeFunctionX64&) =
default;
212 RuntimeFunctionX64&
operator=(RuntimeFunctionX64&&) =
default;
214 std::unique_ptr<ExceptionInfo>
clone()
const override {
215 return std::unique_ptr<RuntimeFunctionX64>(
new RuntimeFunctionX64(*
this));
229 uint32_t
size()
const {
232 return rva_end() - rva_start();
237 return unwind_info_.has_value() ? &*unwind_info_ :
nullptr;
241 return unwind_info_.has_value() ? &*unwind_info_ :
nullptr;
245 unwind_info_ = std::move(info);
248 static bool classof(
const ExceptionInfo* info) {
249 return info->arch() == ExceptionInfo::ARCH::X86_64;
255 uint32_t rva_end_ = 0;
256 uint32_t unwind_rva_ = 0;
257 optional<unwind_info_t> unwind_info_;
Class that is used to a read stream of data from different sources.
Definition BinaryStream.hpp:33
This class is the base class for any exception or runtime function entry.
Definition ExceptionInfo.hpp:33
Main interface to parse PE binaries. In particular the static functions: Parser::parse should be used...
Definition PE/Parser.hpp:52
This class represents an entry in the exception table (.pdata section) for the x86-64 architecture.
Definition RuntimeFunctionX64.hpp:42
std::string to_string() const override
UNWIND_REG
Definition RuntimeFunctionX64.hpp:134
void unwind_info(unwind_info_t info)
Definition RuntimeFunctionX64.hpp:244
const unwind_info_t * unwind_info() const
Detailed unwind information.
Definition RuntimeFunctionX64.hpp:236
UNWIND_OPCODES
Definition RuntimeFunctionX64.hpp:65
~RuntimeFunctionX64()=default
RuntimeFunctionX64(RuntimeFunctionX64 &&)=default
RuntimeFunctionX64(uint32_t rva_start, uint32_t rva_end, uint32_t unwind_rva)
Definition RuntimeFunctionX64.hpp:202
uint32_t unwind_rva() const
Unwind info address.
Definition RuntimeFunctionX64.hpp:226
RuntimeFunctionX64 & operator=(const RuntimeFunctionX64 &)=default
std::unique_ptr< ExceptionInfo > clone() const override
Definition RuntimeFunctionX64.hpp:214
uint32_t size() const
Size of the function (in bytes)
Definition RuntimeFunctionX64.hpp:231
RuntimeFunctionX64(const RuntimeFunctionX64 &)=default
static bool classof(const ExceptionInfo *info)
Definition RuntimeFunctionX64.hpp:248
UNWIND_FLAGS
Definition RuntimeFunctionX64.hpp:53
unwind_info_t * unwind_info()
Definition RuntimeFunctionX64.hpp:240
uint32_t rva_end() const
Function end address.
Definition RuntimeFunctionX64.hpp:221
RuntimeFunctionX64 & operator=(RuntimeFunctionX64 &&)=default
Base class for all unwind operations.
Definition UnwindCodeX64.hpp:31
#define ENABLE_BITMASK_OPERATORS(X)
Definition enums.hpp:24
This namespace wraps code related to PE-x64 unwinding code.
Definition RuntimeFunctionX64.hpp:34
Namespace related to the LIEF's PE module.
Definition Abstract/Header.hpp:32
const char * to_string(AuxiliaryWeakExternal::CHARACTERISTICS e)
LIEF namespace.
Definition Abstract/Binary.hpp:36
result< ok_t > ok_error_t
Opaque structure that is used by LIEF to avoid writing result<void> f(...). Instead,...
Definition errors.hpp:109
bool has(UNWIND_FLAGS flag) const
Check if the given flag is used.
Definition RuntimeFunctionX64.hpp:184
opcodes_t opcodes() const
Enhanced representation of the unwind code.
std::string to_string() const
Pretty representation of this structure as a string.
friend std::ostream & operator<<(std::ostream &os, const unwind_info_t &info)
Definition RuntimeFunctionX64.hpp:195
#define LIEF_API
Definition visibility.h:41
#define LIEF_LOCAL
Definition visibility.h:42