48 HIGH_ENTROPY_VA = 0x0020,
49 DYNAMIC_BASE = 0x0040,
50 FORCE_INTEGRITY = 0x0080,
52 NO_ISOLATION = 0x0200,
55 APPCONTAINER = 0x1000,
58 TERMINAL_SERVER_AWARE = 0x8000
71 EFI_BOOT_SERVICE_DRIVER = 11,
72 EFI_RUNTIME_DRIVER = 12,
75 WINDOWS_BOOT_APPLICATION = 16
94 return major_linker_version_;
99 return minor_linker_version_;
114 return sizeof_initialized_data_;
123 return sizeof_uninitialized_data_;
157 return section_align_;
168 return major_os_version_;
173 return minor_os_version_;
178 return major_image_version_;
183 return minor_image_version_;
188 return major_subsys_version_;
193 return minor_subsys_version_;
199 return win32_version_value_;
206 return sizeof_image_;
211 return sizeof_headers_;
231 return dll_characteristics_;
239 return sizeof_stack_reserve_;
244 return sizeof_stack_commit_;
249 return sizeof_heap_reserve_;
254 return sizeof_heap_commit_;
259 return loader_flags_;
269 return (dll_characteristics() &
static_cast<uint32_t
>(c)) != 0;
277 dll_characteristics(dll_characteristics() |
static_cast<uint32_t
>(c));
282 dll_characteristics(dll_characteristics() & (~
static_cast<uint32_t
>(c)));
289 void major_linker_version(uint8_t value) {
290 major_linker_version_ = value;
293 void minor_linker_version(uint8_t value) {
294 minor_linker_version_ = value;
297 void sizeof_code(uint32_t value) {
298 sizeof_code_ = value;
301 void sizeof_initialized_data(uint32_t value) {
302 sizeof_initialized_data_ = value;
305 void sizeof_uninitialized_data(uint32_t value) {
306 sizeof_uninitialized_data_ = value;
309 void addressof_entrypoint(uint32_t value) {
313 void baseof_code(uint32_t value) {
314 baseof_code_ = value;
317 void baseof_data(uint32_t value) {
318 baseof_data_ = value;
321 void imagebase(uint64_t value) {
325 void section_alignment(uint32_t value) {
326 section_align_ = value;
329 void file_alignment(uint32_t value) {
333 void major_operating_system_version(uint16_t value) {
334 major_os_version_ = value;
337 void minor_operating_system_version(uint16_t value) {
338 minor_os_version_ = value;
341 void major_image_version(uint16_t value) {
342 major_image_version_ = value;
345 void minor_image_version(uint16_t value) {
346 minor_image_version_ = value;
349 void major_subsystem_version(uint16_t value) {
350 major_subsys_version_ = value;
353 void minor_subsystem_version(uint16_t value) {
354 minor_subsys_version_ = value;
357 void win32_version_value(uint32_t value) {
358 win32_version_value_ = value;
361 void sizeof_image(uint32_t value) {
362 sizeof_image_ = value;
365 void sizeof_headers(uint32_t value) {
366 sizeof_headers_ = value;
369 void checksum(uint32_t value) {
373 void subsystem(SUBSYSTEM value) {
377 void dll_characteristics(uint32_t value) {
378 dll_characteristics_ = value;
381 void sizeof_stack_reserve(uint64_t value) {
382 sizeof_stack_reserve_ = value;
385 void sizeof_stack_commit(uint64_t value) {
386 sizeof_stack_commit_ = value;
389 void sizeof_heap_reserve(uint64_t value) {
390 sizeof_heap_reserve_ = value;
393 void sizeof_heap_commit(uint64_t value) {
394 sizeof_heap_commit_ = value;
397 void loader_flags(uint32_t value) {
398 loader_flags_ = value;
401 void numberof_rva_and_size(uint32_t value) {
402 nb_rva_size_ = value;
405 void accept(Visitor& visitor)
const override;
407 OptionalHeader& operator+=(DLL_CHARACTERISTICS c) {
411 OptionalHeader& operator-=(DLL_CHARACTERISTICS c) {
416 LIEF_API
friend std::ostream& operator<<(std::ostream& os,
const OptionalHeader& entry);
419 OptionalHeader() =
default;
421 PE_TYPE magic_ = PE_TYPE::PE32;
422 uint8_t major_linker_version_ = 0;
423 uint8_t minor_linker_version_ = 0;
424 uint32_t sizeof_code_ = 0;
425 uint32_t sizeof_initialized_data_ = 0;
426 uint32_t sizeof_uninitialized_data_ = 0;
427 uint32_t entrypoint_ = 0;
428 uint32_t baseof_code_ = 0;
429 uint32_t baseof_data_ = 0;
430 uint64_t imagebase_ = 0;
431 uint32_t section_align_ = 0;
432 uint32_t file_align_ = 0;
433 uint16_t major_os_version_ = 0;
434 uint16_t minor_os_version_ = 0;
435 uint16_t major_image_version_ = 0;
436 uint16_t minor_image_version_ = 0;
437 uint16_t major_subsys_version_ = 0;
438 uint16_t minor_subsys_version_ = 0;
439 uint32_t win32_version_value_ = 0;
440 uint32_t sizeof_image_ = 0;
441 uint32_t sizeof_headers_ = 0;
442 uint32_t checksum_ = 0;
443 SUBSYSTEM subsystem_ = SUBSYSTEM::UNKNOWN;
444 uint32_t dll_characteristics_ = 0;
445 uint64_t sizeof_stack_reserve_ = 0;
446 uint64_t sizeof_stack_commit_ = 0;
447 uint64_t sizeof_heap_reserve_ = 0;
448 uint64_t sizeof_heap_commit_ = 0;
449 uint32_t loader_flags_ = 0;
450 uint32_t nb_rva_size_ = 0;