LIEF: Library to Instrument Executable Formats Version 2.0.0
Loading...
Searching...
No Matches
LoadConfiguration.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_LOAD_CONFIGURATION_H
17#define LIEF_PE_LOAD_CONFIGURATION_H
18#include "LIEF/errors.hpp"
19#include <cstdint>
20#include <ostream>
21#include <string>
22
23#include <memory>
24
25#include "LIEF/Object.hpp"
26#include "LIEF/iterators.hpp"
27#include "LIEF/visibility.h"
28#include <optional>
29
31
32namespace LIEF {
33class BinaryStream;
34
35namespace PE {
36class Parser;
37class CHPEMetadata;
41
50 public:
51 friend class Parser;
52
53 enum class IMAGE_GUARD : uint32_t {
54 NONE = 0x00000000,
57 CF_INSTRUMENTED = 0x100,
58
60 CFW_INSTRUMENTED = 0x200,
61
63 CF_FUNCTION_TABLE_PRESENT = 0x400,
64
66 SECURITY_COOKIE_UNUSED = 0x800,
67
69 PROTECT_DELAYLOAD_IAT = 0x1000,
70
73 DELAYLOAD_IAT_IN_ITS_OWN_SECTION = 0x2000,
74
77 CF_EXPORT_SUPPRESSION_INFO_PRESENT = 0x4000,
78
80 CF_ENABLE_EXPORT_SUPPRESSION = 0x8000,
81
83 CF_LONGJUMP_TABLE_PRESENT = 0x10000,
84
86 RF_INSTRUMENTED = 0x00020000,
87
89 RF_ENABLE = 0x00040000,
90
92 RF_STRICT = 0x00080000,
93
95 RETPOLINE_PRESENT = 0x00100000,
96
98 EH_CONTINUATION_TABLE_PRESENT = 0x400000,
99
101 XFG_ENABLED = 0x00800000,
102
104 CASTGUARD_PRESENT = 0x01000000,
105
107 MEMCPY_PRESENT = 0x02000000,
108 };
109
111 uint32_t rva = 0;
112 uint32_t extra = 0;
113 };
114
115 using guard_functions_t = std::vector<guard_function_t>;
118
119 using dynamic_relocations_t = std::vector<std::unique_ptr<DynamicRelocation>>;
124
125 template<class PE_T>
126 static LIEF_LOCAL std::unique_ptr<LoadConfiguration> parse(Parser& ctx,
127 BinaryStream& stream);
128
130
133
136
138 uint32_t characteristics() const {
139 return characteristics_;
140 }
141
143 uint32_t size() const {
144 return characteristics_;
145 }
146
148 uint32_t timedatestamp() const {
149 return timedatestamp_;
150 }
151
153 uint16_t major_version() const {
154 return major_version_;
155 }
156
158 uint16_t minor_version() const {
159 return minor_version_;
160 }
161
164 uint32_t global_flags_clear() const {
165 return global_flags_clear_;
166 }
167
170 uint32_t global_flags_set() const {
171 return global_flags_set_;
172 }
173
176 return critical_section_default_timeout_;
177 }
178
182 return decommit_free_block_threshold_;
183 }
184
188 return decommit_total_free_threshold_;
189 }
190
194 uint64_t lock_prefix_table() const {
195 return lock_prefix_table_;
196 }
197
200 uint64_t maximum_allocation_size() const {
201 return maximum_allocation_size_;
202 }
203
205 uint64_t virtual_memory_threshold() const {
206 return virtual_memory_threshold_;
207 }
208
211 uint64_t process_affinity_mask() const {
212 return process_affinity_mask_;
213 }
214
216 uint32_t process_heap_flags() const {
217 return process_heap_flags_;
218 }
219
221 uint16_t csd_version() const {
222 return csd_version_;
223 }
224
226 uint16_t reserved1() const {
227 return reserved1_;
228 }
229
235 uint16_t dependent_load_flags() const {
236 return reserved1_;
237 }
238
240 uint64_t editlist() const {
241 return editlist_;
242 }
243
245 uint64_t security_cookie() const {
246 return security_cookie_;
247 }
248
251 std::optional<uint64_t> se_handler_table() const {
252 return se_handler_table_;
253 }
254
257 std::optional<uint64_t> se_handler_count() const {
258 return se_handler_count_;
259 }
260
262 const std::vector<uint32_t>& seh_functions() const LIEF_LIFETIMEBOUND {
263 return seh_rva_;
264 }
265
267 std::optional<uint64_t> guard_cf_check_function_pointer() const {
268 return guard_cf_check_function_pointer_;
269 }
270
272 std::optional<uint64_t> guard_cf_dispatch_function_pointer() const {
273 return guard_cf_dispatch_function_pointer_;
274 }
275
278 std::optional<uint64_t> guard_cf_function_table() const {
279 return guard_cf_function_table_;
280 }
281
283 std::optional<uint64_t> guard_cf_function_count() const {
284 return guard_cf_function_count_;
285 }
286
290 return guard_cf_functions_;
291 }
292
294 return guard_cf_functions_;
295 }
296
298 std::optional<uint32_t> guard_flags() const {
299 return flags_;
300 }
301
303 bool has(IMAGE_GUARD flag) const {
304 if (!flags_) {
305 return false;
306 }
307 return (*flags_ & (uint32_t)flag) != 0;
308 }
309
311 std::vector<IMAGE_GUARD> guard_cf_flags_list() const;
312
315 return code_integrity_ ? &*code_integrity_ : nullptr;
316 }
317
319 return code_integrity_ ? &*code_integrity_ : nullptr;
320 }
321
323 std::optional<uint64_t> guard_address_taken_iat_entry_table() const {
324 return guard_address_taken_iat_entry_table_;
325 }
326
329 std::optional<uint64_t> guard_address_taken_iat_entry_count() const {
330 return guard_address_taken_iat_entry_count_;
331 }
332
335 return guard_address_taken_iat_entries_;
336 }
337
339 return guard_address_taken_iat_entries_;
340 }
341
343 std::optional<uint64_t> guard_long_jump_target_table() const {
344 return guard_long_jump_target_table_;
345 }
346
349 std::optional<uint64_t> guard_long_jump_target_count() const {
350 return guard_long_jump_target_count_;
351 }
352
355 return guard_long_jump_targets_;
356 }
357
359 return guard_long_jump_targets_;
360 }
361
363 std::optional<uint64_t> dynamic_value_reloc_table() const {
364 return dynamic_value_reloc_table_;
365 }
366
371
373 return dynamic_relocs_;
374 }
375
377 std::optional<uint64_t> hybrid_metadata_pointer() const {
378 return hybrid_metadata_pointer_;
379 }
380
382 std::optional<uint64_t> chpe_metadata_pointer() const {
384 }
385
388 return chpe_.get();
389 }
390
392 return chpe_.get();
393 }
394
396 std::optional<uint64_t> guard_rf_failure_routine() const {
397 return guard_rf_failure_routine_;
398 }
399
401 std::optional<uint64_t> guard_rf_failure_routine_function_pointer() const {
402 return guard_rf_failure_routine_function_pointer_;
403 }
404
406 std::optional<uint32_t> dynamic_value_reloctable_offset() const {
407 return dynamic_value_reloctable_offset_;
408 }
409
411 std::optional<uint16_t> dynamic_value_reloctable_section() const {
412 return dynamic_value_reloctable_section_;
413 }
414
416 std::optional<uint16_t> reserved2() const {
417 return reserved2_;
418 }
419
421 std::optional<uint64_t> guard_rf_verify_stackpointer_function_pointer() const {
422 return guardrf_verify_stackpointer_function_pointer_;
423 }
424
426 std::optional<uint32_t> hotpatch_table_offset() const {
427 return hotpatch_table_offset_;
428 }
429
430 std::optional<uint32_t> reserved3() const {
431 return reserved3_;
432 }
433
434 std::optional<uint64_t> enclave_configuration_ptr() const {
435 return enclave_configuration_ptr_;
436 }
437
439 return enclave_config_.get();
440 }
441
443 return enclave_config_.get();
444 }
445
446 std::optional<uint64_t> volatile_metadata_pointer() const {
447 return volatile_metadata_pointer_;
448 }
449
451 return volatile_metadata_.get();
452 }
453
455 return volatile_metadata_.get();
456 }
457
458 std::optional<uint64_t> guard_eh_continuation_table() const {
459 return guard_eh_continuation_table_;
460 }
461
462 std::optional<uint64_t> guard_eh_continuation_count() const {
463 return guard_eh_continuation_count_;
464 }
465
467 return guard_eh_continuation_functions_;
468 }
469
471 return guard_eh_continuation_functions_;
472 }
473
474 std::optional<uint64_t> guard_xfg_check_function_pointer() const {
475 return guard_xfg_check_function_pointer_;
476 }
477
478 std::optional<uint64_t> guard_xfg_dispatch_function_pointer() const {
479 return guard_xfg_dispatch_function_pointer_;
480 }
481
482 std::optional<uint64_t> guard_xfg_table_dispatch_function_pointer() const {
483 return guard_xfg_table_dispatch_function_pointer_;
484 }
485
486 std::optional<uint64_t> cast_guard_os_determined_failure_mode() const {
487 return cast_guard_os_determined_failure_mode_;
488 }
489
490 std::optional<uint64_t> guard_memcpy_function_pointer() const {
491 return guard_memcpy_function_pointer_;
492 }
493
494 std::optional<uint64_t> uma_function_pointers() const {
495 return uma_function_pointers_;
496 }
497
499 characteristics_ = characteristics;
500 return *this;
501 }
502
504 return characteristics(value);
505 }
506
508 timedatestamp_ = timedatestamp;
509 return *this;
510 }
511
513 major_version_ = major_version;
514 return *this;
515 }
516
518 minor_version_ = minor_version;
519 return *this;
520 }
521
524 global_flags_clear_ = global_flags_clear;
525 return *this;
526 }
527
530 global_flags_set_ = global_flags_set;
531 return *this;
532 }
533
537 critical_section_default_timeout_ = critical_section_default_timeout;
538 return *this;
539 }
540
544 decommit_free_block_threshold_ = decommit_free_block_threshold;
545 return *this;
546 }
547
551 decommit_total_free_threshold_ = decommit_total_free_threshold;
552 return *this;
553 }
554
557 lock_prefix_table_ = lock_prefix_table;
558 return *this;
559 }
560
564 maximum_allocation_size_ = maximum_allocation_size;
565 return *this;
566 }
567
571 virtual_memory_threshold_ = virtual_memory_threshold;
572 return *this;
573 }
574
577 process_affinity_mask_ = process_affinity_mask;
578 return *this;
579 }
580
582 process_heap_flags(uint32_t process_heap_flagsid) LIEF_LIFETIMEBOUND {
583 process_heap_flags_ = process_heap_flagsid;
584 return *this;
585 }
586
588 csd_version_ = csd_version;
589 return *this;
590 }
591
593 reserved1_ = reserved1;
594 return *this;
595 }
596
598 reserved1(flags);
599 return *this;
600 }
601
603 editlist_ = editlist;
604 return *this;
605 }
606
608 security_cookie_ = security_cookie;
609 return *this;
610 }
611
614 se_handler_table_ = se_handler_table;
615 return *this;
616 }
617
620 se_handler_count_ = se_handler_count;
621 return *this;
622 }
623
626 guard_cf_check_function_pointer_ = check_pointer;
627 return *this;
628 }
629
631 uint64_t dispatch_pointer
633 guard_cf_dispatch_function_pointer_ = dispatch_pointer;
634 return *this;
635 }
636
640 guard_cf_function_table_ = guard_cf_function_table;
641 return *this;
642 }
643
647 guard_cf_function_count_ = guard_cf_function_count;
648 return *this;
649 }
650
652 flags_ = (uint32_t)flags;
653 return *this;
654 }
655
657 flags_ = flags;
658 return *this;
659 }
660
662 code_integrity_ = std::move(CI);
663 return *this;
664 }
665
668 guard_address_taken_iat_entry_table_ = value;
669 return *this;
670 }
671
674 guard_address_taken_iat_entry_count_ = value;
675 return *this;
676 }
677
680 guard_long_jump_target_table_ = value;
681 return *this;
682 }
683
686 guard_long_jump_target_count_ = value;
687 return *this;
688 }
689
691 dynamic_value_reloc_table_ = value;
692 return *this;
693 }
694
696 hybrid_metadata_pointer_ = value;
697 return *this;
698 }
699
701 guard_rf_failure_routine_ = value;
702 return *this;
703 }
704
706 uint64_t value
708 guard_rf_failure_routine_function_pointer_ = value;
709 return *this;
710 }
711
714 dynamic_value_reloctable_offset_ = value;
715 return *this;
716 }
717
720 dynamic_value_reloctable_section_ = value;
721 return *this;
722 }
723
725 reserved2_ = value;
726 return *this;
727 }
728
730 uint64_t value
732 guardrf_verify_stackpointer_function_pointer_ = value;
733 return *this;
734 }
735
737 hotpatch_table_offset_ = value;
738 return *this;
739 }
740
742 reserved3_ = value;
743 return *this;
744 }
745
747 enclave_configuration_ptr_ = value;
748 return *this;
749 }
750
752 volatile_metadata_pointer_ = value;
753 return *this;
754 }
755
757 guard_eh_continuation_table_ = value;
758 return *this;
759 }
760
762 guard_eh_continuation_count_ = value;
763 return *this;
764 }
765
767 guard_xfg_check_function_pointer_ = value;
768 return *this;
769 }
770
772 guard_xfg_dispatch_function_pointer_ = value;
773 return *this;
774 }
775
777 guard_xfg_table_dispatch_function_pointer_ = value;
778 return *this;
779 }
780
782 cast_guard_os_determined_failure_mode_ = value;
783 return *this;
784 }
785
787 guard_memcpy_function_pointer_ = value;
788 return *this;
789 }
790
792 uma_function_pointers_ = value;
793 return *this;
794 }
795
797
798 void accept(Visitor& visitor) const override;
799
800 std::string to_string() const;
801
802 LIEF_API friend std::ostream& operator<<(std::ostream& os,
803 const LoadConfiguration& config) {
804 os << config.to_string();
805 return os;
806 }
807
809 LIEF_LOCAL static ok_error_t parse_seh_table(Parser& ctx, BinaryStream& stream,
810 LoadConfiguration& config);
811
814 parse_guard_functions(Parser& ctx, BinaryStream& stream,
815 LoadConfiguration& config, size_t count,
816 guard_functions_t LoadConfiguration::* dst);
817
819 LIEF_LOCAL static ok_error_t parse_dyn_relocs(Parser& ctx,
820 LoadConfiguration& config);
821
823 template<uint8_t version, class PE_T>
825 parse_dyn_relocs_entries(Parser& ctx, BinaryStream& stream,
826 LoadConfiguration& config, size_t size);
827
829 template<class PE_T>
830 LIEF_LOCAL static ok_error_t parse_enclave_config(Parser& ctx,
831 LoadConfiguration& config);
832
834 LIEF_LOCAL static ok_error_t parse_volatile_metadata(Parser& ctx,
835 LoadConfiguration& config);
836
837 protected:
838 uint32_t characteristics_ = 0;
839 uint32_t timedatestamp_ = 0;
840
841 uint16_t major_version_ = 0;
842 uint16_t minor_version_ = 0;
843
844 uint32_t global_flags_clear_ = 0;
845 uint32_t global_flags_set_ = 0;
846
847 uint32_t critical_section_default_timeout_ = 0;
848
849 uint64_t decommit_free_block_threshold_ = 0;
850 uint64_t decommit_total_free_threshold_ = 0;
851
852 uint64_t lock_prefix_table_ = 0;
853 uint64_t maximum_allocation_size_ = 0;
854 uint64_t virtual_memory_threshold_ = 0;
855 uint64_t process_affinity_mask_ = 0;
856 uint32_t process_heap_flags_ = 0;
857 uint16_t csd_version_ = 0;
858 uint16_t reserved1_ = 0; // named DependentLoadFlags in recent headers
859 uint64_t editlist_ = 0;
860 uint64_t security_cookie_ = 0;
861
862 std::optional<uint64_t> se_handler_table_;
863 std::optional<uint64_t> se_handler_count_;
864
865 std::optional<uint64_t> guard_cf_check_function_pointer_;
866 std::optional<uint64_t> guard_cf_dispatch_function_pointer_;
867 std::optional<uint64_t> guard_cf_function_table_;
868 std::optional<uint64_t> guard_cf_function_count_;
869 std::optional<uint32_t> flags_;
870
871 std::optional<CodeIntegrity> code_integrity_;
872
873 std::optional<uint64_t> guard_address_taken_iat_entry_table_;
874 std::optional<uint64_t> guard_address_taken_iat_entry_count_;
875 std::optional<uint64_t> guard_long_jump_target_table_;
876 std::optional<uint64_t> guard_long_jump_target_count_;
877
878 std::optional<uint64_t> dynamic_value_reloc_table_;
879 std::optional<uint64_t> hybrid_metadata_pointer_;
880
881 std::optional<uint64_t> guard_rf_failure_routine_;
882 std::optional<uint64_t> guard_rf_failure_routine_function_pointer_;
883 std::optional<uint32_t> dynamic_value_reloctable_offset_;
884 std::optional<uint16_t> dynamic_value_reloctable_section_;
885 std::optional<uint16_t> reserved2_;
886
887 std::optional<uint64_t> guardrf_verify_stackpointer_function_pointer_;
888 std::optional<uint32_t> hotpatch_table_offset_;
889
890 std::optional<uint32_t> reserved3_;
891 std::optional<uint64_t> enclave_configuration_ptr_;
892
893 std::optional<uint64_t> volatile_metadata_pointer_;
894
895 std::optional<uint64_t> guard_eh_continuation_table_;
896 std::optional<uint64_t> guard_eh_continuation_count_;
897
898 std::optional<uint64_t> guard_xfg_check_function_pointer_;
899 std::optional<uint64_t> guard_xfg_dispatch_function_pointer_;
900 std::optional<uint64_t> guard_xfg_table_dispatch_function_pointer_;
901
902 std::optional<uint64_t> cast_guard_os_determined_failure_mode_;
903
904 std::optional<uint64_t> guard_memcpy_function_pointer_;
905
906 std::optional<uint64_t> uma_function_pointers_;
907
908 std::unique_ptr<CHPEMetadata> chpe_;
909 std::vector<uint32_t> seh_rva_;
910 guard_functions_t guard_cf_functions_;
911 guard_functions_t guard_address_taken_iat_entries_;
912 guard_functions_t guard_long_jump_targets_;
913 guard_functions_t guard_eh_continuation_functions_;
914 dynamic_relocations_t dynamic_relocs_;
915 std::unique_ptr<EnclaveConfiguration> enclave_config_;
916 std::unique_ptr<VolatileMetadata> volatile_metadata_;
917};
918
920
921}
922}
923
924#endif
Class that is used to a read stream of data from different sources.
Definition BinaryStream.hpp:35
Base class for any Compiled Hybrid Portable Executable (CHPE) metadata.
Definition PE/LoadConfigurations/CHPEMetadata/Metadata.hpp:32
Definition CodeIntegrity.hpp:32
This is the base class for any IMAGE_DYNAMIC_RELOCATION32, IMAGE_DYNAMIC_RELOCATION32_V2,...
Definition DynamicRelocationBase.hpp:33
This class represents the enclave configuration.
Definition EnclaveConfiguration.hpp:32
This class represents the load configuration data associated with the IMAGE_LOAD_CONFIG_DIRECTORY.
Definition LoadConfiguration.hpp:49
std::optional< uint32_t > guard_flags() const
Control Flow Guard related flags.
Definition LoadConfiguration.hpp:298
LoadConfiguration & guard_cf_function_count(uint64_t guard_cf_function_count)
Definition LoadConfiguration.hpp:644
std::optional< uint64_t > dynamic_value_reloc_table() const
VA pointing to a IMAGE_DYNAMIC_RELOCATION_TABLE.
Definition LoadConfiguration.hpp:363
static std::unique_ptr< LoadConfiguration > parse(Parser &ctx, BinaryStream &stream)
std::vector< guard_function_t > guard_functions_t
Definition LoadConfiguration.hpp:115
ref_iterator< guard_functions_t & > it_guard_functions
Definition LoadConfiguration.hpp:116
LoadConfiguration & guard_eh_continuation_count(uint64_t value)
Definition LoadConfiguration.hpp:761
LoadConfiguration & operator=(const LoadConfiguration &)
std::optional< uint64_t > guard_xfg_check_function_pointer() const
Definition LoadConfiguration.hpp:474
LoadConfiguration & guard_cf_check_function_pointer(uint64_t check_pointer)
Definition LoadConfiguration.hpp:625
std::optional< uint64_t > guard_memcpy_function_pointer() const
Definition LoadConfiguration.hpp:490
std::string to_string() const
LoadConfiguration & dynamic_value_reloctable_section(uint16_t value)
Definition LoadConfiguration.hpp:719
LoadConfiguration & decommit_free_block_threshold(uint64_t decommit_free_block_threshold)
Definition LoadConfiguration.hpp:541
LoadConfiguration & guard_long_jump_target_table(uint64_t value)
Definition LoadConfiguration.hpp:679
it_dynamic_relocations_t dynamic_relocations()
Return an iterator over the Dynamic relocations (DVRT).
Definition LoadConfiguration.hpp:368
uint32_t characteristics() const
Characteristics of the structure which is defined by its size.
Definition LoadConfiguration.hpp:138
LoadConfiguration & maximum_allocation_size(uint64_t maximum_allocation_size)
Definition LoadConfiguration.hpp:561
LoadConfiguration & security_cookie(uint64_t security_cookie)
Definition LoadConfiguration.hpp:607
CodeIntegrity * code_integrity()
Definition LoadConfiguration.hpp:318
ref_iterator< dynamic_relocations_t &, DynamicRelocation * > it_dynamic_relocations_t
Definition LoadConfiguration.hpp:120
uint32_t critical_section_default_timeout() const
The critical section default time-out value.
Definition LoadConfiguration.hpp:175
std::optional< uint64_t > guard_eh_continuation_count() const
Definition LoadConfiguration.hpp:462
LoadConfiguration & guard_xfg_dispatch_function_pointer(uint64_t value)
Definition LoadConfiguration.hpp:771
LoadConfiguration & operator=(LoadConfiguration &&)
LoadConfiguration & guard_long_jump_target_count(uint64_t value)
Definition LoadConfiguration.hpp:685
uint64_t security_cookie() const
A pointer to a cookie that is used by Visual C++ or GS implementation.
Definition LoadConfiguration.hpp:245
std::optional< uint64_t > enclave_configuration_ptr() const
Definition LoadConfiguration.hpp:434
LoadConfiguration & decommit_total_free_threshold(uint64_t decommit_total_free_threshold)
Definition LoadConfiguration.hpp:548
LoadConfiguration & guard_rf_verify_stackpointer_function_pointer(uint64_t value)
Definition LoadConfiguration.hpp:729
uint64_t decommit_free_block_threshold() const
The size of the minimum block that must be freed before it is freed (de-committed),...
Definition LoadConfiguration.hpp:181
std::vector< IMAGE_GUARD > guard_cf_flags_list() const
List of flags.
std::optional< uint64_t > guard_rf_failure_routine() const
VA of the failure routine.
Definition LoadConfiguration.hpp:396
LoadConfiguration & hybrid_metadata_pointer(uint64_t value)
Definition LoadConfiguration.hpp:695
std::optional< uint64_t > guard_cf_check_function_pointer() const
The VA where Control Flow Guard check-function pointer is stored.
Definition LoadConfiguration.hpp:267
LoadConfiguration & se_handler_table(uint64_t se_handler_table)
Definition LoadConfiguration.hpp:613
std::optional< uint32_t > reserved3() const
Definition LoadConfiguration.hpp:430
LoadConfiguration & guard_cf_function_table(uint64_t guard_cf_function_table)
Definition LoadConfiguration.hpp:637
LoadConfiguration & reserved2(uint16_t value)
Definition LoadConfiguration.hpp:724
const std::vector< uint32_t > & seh_functions() const
Return the list of the function RVA in the SEH table (if any).
Definition LoadConfiguration.hpp:262
LoadConfiguration & enclave_configuration_ptr(uint64_t value)
Definition LoadConfiguration.hpp:746
LoadConfiguration & characteristics(uint32_t characteristics)
Definition LoadConfiguration.hpp:498
uint64_t process_affinity_mask() const
The process affinity mask. For more information, see GetProcessAffinityMask. This member is available...
Definition LoadConfiguration.hpp:211
std::optional< uint16_t > dynamic_value_reloctable_section() const
The section index of the dynamic value relocation table.
Definition LoadConfiguration.hpp:411
LoadConfiguration & guard_flags(IMAGE_GUARD flags)
Definition LoadConfiguration.hpp:651
LoadConfiguration & lock_prefix_table(uint64_t lock_prefix_table)
Definition LoadConfiguration.hpp:556
std::optional< uint64_t > guard_address_taken_iat_entry_table() const
The VA where Control Flow Guard address taken IAT table is stored.
Definition LoadConfiguration.hpp:323
const_ref_iterator< const dynamic_relocations_t &, const DynamicRelocation * > it_const_dynamic_relocations_t
Definition LoadConfiguration.hpp:122
LoadConfiguration & dynamic_value_reloctable_offset(uint32_t value)
Definition LoadConfiguration.hpp:713
LoadConfiguration & global_flags_set(uint32_t global_flags_set)
Definition LoadConfiguration.hpp:529
LoadConfiguration & guard_memcpy_function_pointer(uint64_t value)
Definition LoadConfiguration.hpp:786
const EnclaveConfiguration * enclave_config() const
Definition LoadConfiguration.hpp:438
std::optional< uint32_t > hotpatch_table_offset() const
Offset to the hotpatch table.
Definition LoadConfiguration.hpp:426
uint64_t maximum_allocation_size() const
The maximum allocation size, in bytes. This member is obsolete and is used only for debugging purpose...
Definition LoadConfiguration.hpp:200
LoadConfiguration & code_integrity(CodeIntegrity CI)
Definition LoadConfiguration.hpp:661
std::optional< uint64_t > guard_long_jump_target_count() const
The count of unique RVAs in the table pointed by guard_long_jump_target_table.
Definition LoadConfiguration.hpp:349
CHPEMetadata * chpe_metadata()
Definition LoadConfiguration.hpp:391
LoadConfiguration & guard_rf_failure_routine(uint64_t value)
Definition LoadConfiguration.hpp:700
std::optional< uint32_t > dynamic_value_reloctable_offset() const
Offset of dynamic relocation table relative to the relocation table.
Definition LoadConfiguration.hpp:406
LoadConfiguration & reserved3(uint32_t value)
Definition LoadConfiguration.hpp:741
std::optional< uint64_t > guard_long_jump_target_table() const
The VA where Control Flow Guard long jump target table is stored.
Definition LoadConfiguration.hpp:343
uint16_t minor_version() const
Minor version.
Definition LoadConfiguration.hpp:158
LoadConfiguration & guard_flags(uint32_t flags)
Definition LoadConfiguration.hpp:656
std::optional< uint64_t > guard_cf_function_table() const
The VA of the sorted table of RVAs of each Control Flow Guard function in the image.
Definition LoadConfiguration.hpp:278
std::optional< uint64_t > guard_xfg_table_dispatch_function_pointer() const
Definition LoadConfiguration.hpp:482
it_const_guard_functions guard_address_taken_iat_entries() const
List of RVA pointed by guard_address_taken_iat_entry_table().
Definition LoadConfiguration.hpp:334
it_const_guard_functions guard_cf_functions() const
Iterator over the Control Flow Guard functions referenced by guard_cf_function_table().
Definition LoadConfiguration.hpp:289
it_guard_functions guard_long_jump_targets()
Definition LoadConfiguration.hpp:358
uint32_t timedatestamp() const
The date and time stamp value.
Definition LoadConfiguration.hpp:148
const CHPEMetadata * chpe_metadata() const
Compiled Hybrid Portable Executable (CHPE) metadata (if any).
Definition LoadConfiguration.hpp:387
uint32_t size() const
Size of the current structure.
Definition LoadConfiguration.hpp:143
uint16_t csd_version() const
The service pack version.
Definition LoadConfiguration.hpp:221
LoadConfiguration & guard_rf_failure_routine_function_pointer(uint64_t value)
Definition LoadConfiguration.hpp:705
uint64_t editlist() const
Reserved for use by the system.
Definition LoadConfiguration.hpp:240
uint32_t global_flags_set() const
The global flags that control system behavior. For more information, see Gflags.exe.
Definition LoadConfiguration.hpp:170
std::optional< uint64_t > volatile_metadata_pointer() const
Definition LoadConfiguration.hpp:446
it_const_dynamic_relocations_t dynamic_relocations() const
Definition LoadConfiguration.hpp:372
LoadConfiguration & virtual_memory_threshold(uint64_t virtual_memory_threshold)
Definition LoadConfiguration.hpp:568
uint64_t virtual_memory_threshold() const
The maximum block size that can be allocated from heap segments, in bytes.
Definition LoadConfiguration.hpp:205
std::optional< uint64_t > guard_xfg_dispatch_function_pointer() const
Definition LoadConfiguration.hpp:478
LoadConfiguration(LoadConfiguration &&)
std::optional< uint64_t > guard_rf_failure_routine_function_pointer() const
VA of the failure routine fptr.
Definition LoadConfiguration.hpp:401
void accept(Visitor &visitor) const override
LoadConfiguration & size(uint32_t value)
Definition LoadConfiguration.hpp:503
LoadConfiguration & timedatestamp(uint32_t timedatestamp)
Definition LoadConfiguration.hpp:507
LoadConfiguration & csd_version(uint16_t csd_version)
Definition LoadConfiguration.hpp:587
LoadConfiguration & editlist(uint64_t editlist)
Definition LoadConfiguration.hpp:602
uint64_t decommit_total_free_threshold() const
The size of the minimum total memory that must be freed in the process heap before it is freed (de-co...
Definition LoadConfiguration.hpp:187
it_const_guard_functions guard_long_jump_targets() const
List of RVA pointed by guard_address_taken_iat_entry_table().
Definition LoadConfiguration.hpp:354
const VolatileMetadata * volatile_metadata() const
Definition LoadConfiguration.hpp:450
std::optional< uint64_t > chpe_metadata_pointer() const
VA to the extra Compiled Hybrid Portable Executable (CHPE) metadata.
Definition LoadConfiguration.hpp:382
uint64_t lock_prefix_table() const
The VA of a list of addresses where the LOCK prefix is used. These will be replaced by NOP on single-...
Definition LoadConfiguration.hpp:194
LoadConfiguration & uma_function_pointers(uint64_t value)
Definition LoadConfiguration.hpp:791
it_const_guard_functions guard_eh_continuation_functions() const
Definition LoadConfiguration.hpp:466
std::optional< uint64_t > hybrid_metadata_pointer() const
Alias for chpe_metadata_pointer().
Definition LoadConfiguration.hpp:377
EnclaveConfiguration * enclave_config()
Definition LoadConfiguration.hpp:442
std::optional< uint64_t > guard_rf_verify_stackpointer_function_pointer() const
VA of the Function verifying the stack pointer.
Definition LoadConfiguration.hpp:421
LoadConfiguration & dependent_load_flags(uint16_t flags)
Definition LoadConfiguration.hpp:597
LoadConfiguration & reserved1(uint16_t reserved1)
Definition LoadConfiguration.hpp:592
friend class Parser
Definition LoadConfiguration.hpp:51
LoadConfiguration & cast_guard_os_determined_failure_mode(uint64_t value)
Definition LoadConfiguration.hpp:781
uint32_t global_flags_clear() const
The global flags that control system behavior. For more information, see Gflags.exe.
Definition LoadConfiguration.hpp:164
LoadConfiguration & guard_address_taken_iat_entry_count(uint64_t value)
Definition LoadConfiguration.hpp:673
uint16_t major_version() const
Major version.
Definition LoadConfiguration.hpp:153
bool has(IMAGE_GUARD flag) const
Check if the given flag is present.
Definition LoadConfiguration.hpp:303
LoadConfiguration & guard_address_taken_iat_entry_table(uint64_t value)
Definition LoadConfiguration.hpp:667
LoadConfiguration & guard_xfg_table_dispatch_function_pointer(uint64_t value)
Definition LoadConfiguration.hpp:776
std::optional< uint64_t > guard_cf_dispatch_function_pointer() const
The VA where Control Flow Guard dispatch-function pointer is stored.
Definition LoadConfiguration.hpp:272
std::optional< uint64_t > se_handler_table() const
The VA of the sorted table of RVAs of each valid, unique handler in the image. This member is availab...
Definition LoadConfiguration.hpp:251
LoadConfiguration & process_affinity_mask(uint64_t process_affinity_mask)
Definition LoadConfiguration.hpp:576
LoadConfiguration & guard_xfg_check_function_pointer(uint64_t value)
Definition LoadConfiguration.hpp:766
LoadConfiguration & hotpatch_table_offset(uint32_t value)
Definition LoadConfiguration.hpp:736
LoadConfiguration & global_flags_clear(uint32_t global_flags_clear)
Definition LoadConfiguration.hpp:523
std::optional< uint64_t > uma_function_pointers() const
Definition LoadConfiguration.hpp:494
VolatileMetadata * volatile_metadata()
Definition LoadConfiguration.hpp:454
uint32_t process_heap_flags() const
The process heap flags. For more information, see HeapCreate.
Definition LoadConfiguration.hpp:216
uint16_t dependent_load_flags() const
Alias for reserved1().
Definition LoadConfiguration.hpp:235
LoadConfiguration & volatile_metadata_pointer(uint64_t value)
Definition LoadConfiguration.hpp:751
IMAGE_GUARD
Definition LoadConfiguration.hpp:53
it_guard_functions guard_address_taken_iat_entries()
Definition LoadConfiguration.hpp:338
LoadConfiguration & guard_cf_dispatch_function_pointer(uint64_t dispatch_pointer)
Definition LoadConfiguration.hpp:630
std::optional< uint64_t > guard_eh_continuation_table() const
Definition LoadConfiguration.hpp:458
const_ref_iterator< const guard_functions_t & > it_const_guard_functions
Definition LoadConfiguration.hpp:117
LoadConfiguration & se_handler_count(uint64_t se_handler_count)
Definition LoadConfiguration.hpp:619
LoadConfiguration & minor_version(uint16_t minor_version)
Definition LoadConfiguration.hpp:517
LoadConfiguration & process_heap_flags(uint32_t process_heap_flagsid)
Definition LoadConfiguration.hpp:582
friend std::ostream & operator<<(std::ostream &os, const LoadConfiguration &config)
Definition LoadConfiguration.hpp:802
std::optional< uint16_t > reserved2() const
Must be zero.
Definition LoadConfiguration.hpp:416
const CodeIntegrity * code_integrity() const
Code integrity information.
Definition LoadConfiguration.hpp:314
LoadConfiguration & major_version(uint16_t major_version)
Definition LoadConfiguration.hpp:512
LoadConfiguration & guard_eh_continuation_table(uint64_t value)
Definition LoadConfiguration.hpp:756
LoadConfiguration & dynamic_value_reloc_table(uint64_t value)
Definition LoadConfiguration.hpp:690
std::optional< uint64_t > guard_address_taken_iat_entry_count() const
The count of unique RVAs in the table pointed by guard_address_taken_iat_entry_table().
Definition LoadConfiguration.hpp:329
it_guard_functions guard_cf_functions()
Definition LoadConfiguration.hpp:293
LoadConfiguration & critical_section_default_timeout(uint32_t critical_section_default_timeout)
Definition LoadConfiguration.hpp:534
std::vector< std::unique_ptr< DynamicRelocation > > dynamic_relocations_t
Definition LoadConfiguration.hpp:119
std::optional< uint64_t > se_handler_count() const
The count of unique handlers in the table. This member is available only for x86.
Definition LoadConfiguration.hpp:257
uint16_t reserved1() const
See: dependent_load_flags().
Definition LoadConfiguration.hpp:226
it_guard_functions guard_eh_continuation_functions()
Definition LoadConfiguration.hpp:470
std::optional< uint64_t > cast_guard_os_determined_failure_mode() const
Definition LoadConfiguration.hpp:486
LoadConfiguration(const LoadConfiguration &)
std::optional< uint64_t > guard_cf_function_count() const
The count of unique RVAs in the guard_cf_function_table() table.
Definition LoadConfiguration.hpp:283
Main interface to parse PE binaries. In particular, the static Parser::parse functions should be used...
Definition PE/Parser.hpp:53
This class represents volatile metadata which can be enabled at link time with /volatileMetadata.
Definition VolatileMetadata.hpp:35
Definition Visitor.hpp:212
Opaque structure that is used by LIEF to avoid writing result<void> f(...). Instead,...
Definition errors.hpp:119
Iterator which returns reference on container's values.
Definition iterators.hpp:47
#define LIEF_LIFETIMEBOUND
Definition compiler_attributes.hpp:72
Namespace related to the LIEF's PE module.
Definition Abstract/Header.hpp:32
const char * to_string(CODE_PAGES e)
LIEF namespace.
Definition Abstract/Binary.hpp:41
ref_iterator< CT, U, typename decay_t< CT >::const_iterator > const_ref_iterator
Iterator which returns a const ref on container's values.
Definition iterators.hpp:316
Definition LoadConfiguration.hpp:110
uint32_t extra
Definition LoadConfiguration.hpp:112
uint32_t rva
Definition LoadConfiguration.hpp:111
#define LIEF_API
Definition visibility.h:45
#define LIEF_LOCAL
Definition visibility.h:46