LIEF: Library to Instrument Executable Formats Version 2.0.0
Loading...
Searching...
No Matches
DosHeader.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_PE_DOS_HEADER_H
17#define LIEF_PE_DOS_HEADER_H
18#include <array>
19#include <cstdint>
20#include <ostream>
21
22#include "LIEF/Object.hpp"
23#include "LIEF/visibility.h"
24
25namespace LIEF {
26class vector_iostream;
27}
28
29namespace LIEF::PE {
30
31enum class PE_TYPE : uint16_t;
32
33namespace details {
34struct pe_dos_header;
35}
36
41class LIEF_API DosHeader : public Object {
42 public:
43 using reserved_t = std::array<uint16_t, 4>;
44 using reserved2_t = std::array<uint16_t, 10>;
45
46 static constexpr uint16_t MAGIC = 0x5a4d; // MZ
47
48 DosHeader(const details::pe_dos_header& header);
49 DosHeader(const DosHeader&) = default;
50 DosHeader& operator=(const DosHeader&) = default;
51
52 DosHeader(DosHeader&&) = default;
54
55 ~DosHeader() override = default;
56
58 uint16_t magic() const {
59 return magic_;
60 }
61
62 uint16_t used_bytes_in_last_page() const {
63 return used_bytes_in_last_page_;
64 }
65
66 uint16_t file_size_in_pages() const {
67 return file_sz_in_pages_;
68 }
69
70 uint16_t numberof_relocation() const {
71 return nb_relocations_;
72 }
73
74 uint16_t header_size_in_paragraphs() const {
75 return header_sz_in_paragraphs_;
76 }
77
78 uint16_t minimum_extra_paragraphs() const {
79 return min_extra_paragraphs_;
80 }
81
82 uint16_t maximum_extra_paragraphs() const {
83 return max_extra_paragraphs_;
84 }
85
86 uint16_t initial_relative_ss() const {
87 return init_relative_ss_;
88 }
89
90 uint16_t initial_sp() const {
91 return init_sp_;
92 }
93
94 uint16_t checksum() const {
95 return checksum_;
96 }
97
98 uint16_t initial_ip() const {
99 return init_ip_;
100 }
101
102 uint16_t initial_relative_cs() const {
103 return init_rel_cs_;
104 }
105
106 uint16_t addressof_relocation_table() const {
107 return addr_reloc_table_;
108 }
109
110 uint16_t overlay_number() const {
111 return overlay_number_;
112 }
113
114 const reserved_t& reserved() const {
115 return reserved_;
116 }
117
118 uint16_t oem_id() const {
119 return oem_id_;
120 }
121
122 uint16_t oem_info() const {
123 return oem_info_;
124 }
125
126 const reserved2_t& reserved2() const {
127 return reserved2_;
128 }
129
131 uint32_t addressof_new_exeheader() const {
132 return addr_new_exe_header_;
133 }
134
135 void magic(uint16_t magic) {
136 magic_ = magic;
137 }
138
139 void used_bytes_in_last_page(uint16_t value) {
140 used_bytes_in_last_page_ = value;
141 }
142
143 void file_size_in_pages(uint16_t value) {
144 file_sz_in_pages_ = value;
145 }
146
147 void numberof_relocation(uint16_t value) {
148 nb_relocations_ = value;
149 }
150
151 void header_size_in_paragraphs(uint16_t value) {
152 header_sz_in_paragraphs_ = value;
153 }
154
155 void minimum_extra_paragraphs(uint16_t value) {
156 min_extra_paragraphs_ = value;
157 }
158
159 void maximum_extra_paragraphs(uint16_t value) {
160 max_extra_paragraphs_ = value;
161 }
162
163 void initial_relative_ss(uint16_t value) {
164 init_relative_ss_ = value;
165 }
166
167 void initial_sp(uint16_t value) {
168 init_sp_ = value;
169 }
170
171 void checksum(uint16_t value) {
172 checksum_ = value;
173 }
174
175 void initial_ip(uint16_t value) {
176 init_ip_ = value;
177 }
178
179 void initial_relative_cs(uint16_t value) {
180 init_rel_cs_ = value;
181 }
182
183 void addressof_relocation_table(uint16_t value) {
184 addr_reloc_table_ = value;
185 }
186
187 void overlay_number(uint16_t value) {
188 overlay_number_ = value;
189 }
190
192 reserved_ = reserved;
193 }
194
195 void oem_id(uint16_t value) {
196 oem_id_ = value;
197 }
198
199 void oem_info(uint16_t value) {
200 oem_info_ = value;
201 }
202
204 reserved2_ = reserved2;
205 }
206
207 void addressof_new_exeheader(uint32_t value) {
208 addr_new_exe_header_ = value;
209 }
210
211 void accept(Visitor& visitor) const override;
212
213 LIEF_API friend std::ostream& operator<<(std::ostream& os,
214 const DosHeader& entry);
215
217
219 LIEF_LOCAL DosHeader() = default;
220
222 LIEF_LOCAL size_t serialize(vector_iostream& ios) const;
223
224 private:
225 uint16_t magic_ = 0;
226 uint16_t used_bytes_in_last_page_ = 0;
227 uint16_t file_sz_in_pages_ = 0;
228 uint16_t nb_relocations_ = 0;
229 uint16_t header_sz_in_paragraphs_ = 0;
230 uint16_t min_extra_paragraphs_ = 0;
231 uint16_t max_extra_paragraphs_ = 0;
232 uint16_t init_relative_ss_ = 0;
233 uint16_t init_sp_ = 0;
234 uint16_t checksum_ = 0;
235 uint16_t init_ip_ = 0;
236 uint16_t init_rel_cs_ = 0;
237 uint16_t addr_reloc_table_ = 0;
238 uint16_t overlay_number_ = 0;
239 reserved_t reserved_ = {0};
240 uint16_t oem_id_ = 0;
241 uint16_t oem_info_ = 0;
242 reserved2_t reserved2_ = {0};
243 uint32_t addr_new_exe_header_ = 0;
244};
245}
246
247
248#endif
void minimum_extra_paragraphs(uint16_t value)
Definition DosHeader.hpp:155
uint16_t magic() const
Magic bytes identifying a DOS/PE binary.
Definition DosHeader.hpp:58
void file_size_in_pages(uint16_t value)
Definition DosHeader.hpp:143
uint16_t numberof_relocation() const
Definition DosHeader.hpp:70
static constexpr uint16_t MAGIC
Definition DosHeader.hpp:46
DosHeader & operator=(const DosHeader &)=default
DosHeader & operator=(DosHeader &&)=default
uint16_t initial_relative_cs() const
Definition DosHeader.hpp:102
DosHeader(DosHeader &&)=default
void oem_id(uint16_t value)
Definition DosHeader.hpp:195
void reserved(const reserved_t &reserved)
Definition DosHeader.hpp:191
uint16_t addressof_relocation_table() const
Definition DosHeader.hpp:106
uint16_t initial_sp() const
Definition DosHeader.hpp:90
uint16_t header_size_in_paragraphs() const
Definition DosHeader.hpp:74
const reserved_t & reserved() const
Definition DosHeader.hpp:114
void accept(Visitor &visitor) const override
uint16_t oem_id() const
Definition DosHeader.hpp:118
void oem_info(uint16_t value)
Definition DosHeader.hpp:199
void used_bytes_in_last_page(uint16_t value)
Definition DosHeader.hpp:139
void header_size_in_paragraphs(uint16_t value)
Definition DosHeader.hpp:151
void reserved2(const reserved2_t &reserved2)
Definition DosHeader.hpp:203
void overlay_number(uint16_t value)
Definition DosHeader.hpp:187
uint16_t initial_ip() const
Definition DosHeader.hpp:98
std::array< uint16_t, 10 > reserved2_t
Definition DosHeader.hpp:44
uint32_t addressof_new_exeheader() const
Return the offset to the PE::Header structure.
Definition DosHeader.hpp:131
void numberof_relocation(uint16_t value)
Definition DosHeader.hpp:147
friend std::ostream & operator<<(std::ostream &os, const DosHeader &entry)
void addressof_relocation_table(uint16_t value)
Definition DosHeader.hpp:183
const reserved2_t & reserved2() const
Definition DosHeader.hpp:126
void magic(uint16_t magic)
Definition DosHeader.hpp:135
void initial_sp(uint16_t value)
Definition DosHeader.hpp:167
uint16_t overlay_number() const
Definition DosHeader.hpp:110
uint16_t maximum_extra_paragraphs() const
Definition DosHeader.hpp:82
DosHeader(const DosHeader &)=default
~DosHeader() override=default
uint16_t oem_info() const
Definition DosHeader.hpp:122
uint16_t file_size_in_pages() const
Definition DosHeader.hpp:66
uint16_t checksum() const
Definition DosHeader.hpp:94
void initial_relative_cs(uint16_t value)
Definition DosHeader.hpp:179
std::array< uint16_t, 4 > reserved_t
Definition DosHeader.hpp:43
uint16_t minimum_extra_paragraphs() const
Definition DosHeader.hpp:78
void initial_ip(uint16_t value)
Definition DosHeader.hpp:175
void maximum_extra_paragraphs(uint16_t value)
Definition DosHeader.hpp:159
DosHeader(const details::pe_dos_header &header)
static DosHeader create(PE_TYPE type)
void initial_relative_ss(uint16_t value)
Definition DosHeader.hpp:163
void addressof_new_exeheader(uint32_t value)
Definition DosHeader.hpp:207
uint16_t used_bytes_in_last_page() const
Definition DosHeader.hpp:62
void checksum(uint16_t value)
Definition DosHeader.hpp:171
uint16_t initial_relative_ss() const
Definition DosHeader.hpp:86
Definition Visitor.hpp:212
Definition iostream.hpp:34
Definition DataDirectory.hpp:38
Namespace related to the LIEF's PE module.
Definition Abstract/Header.hpp:32
PE_TYPE
Definition PE/enums.hpp:22
LIEF namespace.
Definition Abstract/Binary.hpp:42
#define LIEF_API
Definition visibility.h:45
#define LIEF_LOCAL
Definition visibility.h:46