LIEF: Library to Instrument Executable Formats Version 0.15.0
Loading...
Searching...
No Matches
debug/Debug.hpp
1
2/* Copyright 2017 - 2024 R. Thomas
3 * Copyright 2017 - 2024 Quarkslab
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17#ifndef LIEF_PE_DEBUG_H
18#define LIEF_PE_DEBUG_H
19#include <cstdint>
20#include <ostream>
21#include <memory>
22
23#include "LIEF/Object.hpp"
24#include "LIEF/visibility.h"
25
26namespace LIEF {
27namespace PE {
28class Parser;
29class Builder;
30
31namespace details {
32struct pe_debug;
33}
34
38class LIEF_API Debug : public Object {
39 friend class Parser;
40 friend class Builder;
41
42 public:
44 enum class TYPES {
45 UNKNOWN = 0,
46 COFF = 1,
47 CODEVIEW = 2,
48 FPO = 3,
49 MISC = 4,
50 EXCEPTION = 5,
51 FIXUP = 6,
52 OMAP_TO_SRC = 7,
53 OMAP_FROM_SRC = 8,
54 BORLAND = 9,
55 RESERVED10 = 10,
56 CLSID = 11,
57 VC_FEATURE = 12,
58 POGO = 13,
59 ILTCG = 14,
60 MPX = 15,
61 REPRO = 16,
62 EX_DLLCHARACTERISTICS = 20,
63 };
64 Debug();
65 Debug(TYPES type) {
66 type_ = type;
67 }
68
69 Debug(const details::pe_debug& debug_s);
70 Debug(const Debug& other);
71 Debug& operator=(const Debug& other);
72
73 ~Debug() override;
74
75 virtual std::unique_ptr<Debug> clone() const;
76
78 uint32_t characteristics() const {
79 return characteristics_;
80 }
81
83 uint32_t timestamp() const {
84 return timestamp_;
85 }
86
88 uint16_t major_version() const {
89 return major_version_;
90 }
91
93 uint16_t minor_version() const {
94 return minor_version_;
95 }
96
98 TYPES type() const {
99 return type_;
100 }
101
103 uint32_t sizeof_data() const {
104 return sizeof_data_;
105 }
106
108 uint32_t addressof_rawdata() const {
109 return addressof_rawdata_;
110 }
111
113 uint32_t pointerto_rawdata() const {
114 return pointerto_rawdata_;
115 }
116
117 void characteristics(uint32_t characteristics) {
118 characteristics_ = characteristics;
119 }
120
121 void timestamp(uint32_t timestamp) {
122 timestamp_ = timestamp;
123 }
124
125 void major_version(uint16_t major_version) {
126 major_version_ = major_version;
127 }
128
129 void minor_version(uint16_t minor_version) {
130 minor_version_ = minor_version;
131 }
132
133 void sizeof_data(uint32_t sizeof_data) {
134 sizeof_data_ = sizeof_data;
135 }
136
137 void addressof_rawdata(uint32_t addressof_rawdata) {
138 addressof_rawdata_ = addressof_rawdata;
139 }
140
141 void pointerto_rawdata(uint32_t pointerto_rawdata) {
142 pointerto_rawdata_ = pointerto_rawdata;
143 }
144
145 void accept(Visitor& visitor) const override;
146
147 LIEF_API friend std::ostream& operator<<(std::ostream& os, const Debug& entry);
148
149 protected:
150 TYPES type_ = TYPES::UNKNOWN;
151 uint32_t characteristics_ = 0;
152 uint32_t timestamp_ = 0;
153 uint16_t major_version_ = 0;
154 uint16_t minor_version_ = 0;
155 uint32_t sizeof_data_ = 0;
156 uint32_t addressof_rawdata_ = 0;
157 uint32_t pointerto_rawdata_ = 0;
158};
159
160LIEF_API const char* to_string(Debug::TYPES e);
161
162}
163}
164#endif
Definition Object.hpp:25
Class that is used to rebuild a raw PE binary from a PE::Binary object.
Definition PE/Builder.hpp:45
This class represents a generic entry in the debug data directory. For known types,...
Definition debug/Debug.hpp:38
uint32_t addressof_rawdata() const
Address of the debug data relative to the image base.
Definition debug/Debug.hpp:108
uint32_t sizeof_data() const
Size of the debug data.
Definition debug/Debug.hpp:103
uint16_t major_version() const
The major version number of the debug data format.
Definition debug/Debug.hpp:88
uint16_t minor_version() const
The minor version number of the debug data format.
Definition debug/Debug.hpp:93
uint32_t characteristics() const
Reserved should be 0.
Definition debug/Debug.hpp:78
uint32_t pointerto_rawdata() const
File offset of the debug data.
Definition debug/Debug.hpp:113
uint32_t timestamp() const
The time and date that the debug data was created.
Definition debug/Debug.hpp:83
TYPES type() const
The format DEBUG_TYPES of the debugging information.
Definition debug/Debug.hpp:98
TYPES
The entry types.
Definition debug/Debug.hpp:44
Main interface to parse PE binaries. In particular the static functions: Parser::parse should be used...
Definition PE/Parser.hpp:47
LIEF namespace.
Definition Abstract/Binary.hpp:32