LIEF: Library to Instrument Executable Formats Version 0.17.0
Loading...
Searching...
No Matches
LoadConfiguration.hpp
Go to the documentation of this file.
1/* Copyright 2017 - 2025 R. Thomas
2 * Copyright 2017 - 2025 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 <ostream>
19#include <cstdint>
20
21#include <memory>
22
23#include "LIEF/Object.hpp"
24#include "LIEF/visibility.h"
25#include "LIEF/optional.hpp"
26#include "LIEF/iterators.hpp"
27
29
30namespace LIEF {
31class BinaryStream;
32
33namespace PE {
34class Parser;
35class CHPEMetadata;
39
47 public:
48 friend class Parser;
49
50 enum class IMAGE_GUARD : uint32_t {
51 NONE = 0x00000000,
55
58
61
64
67
71
75
78
81
83 RF_INSTRUMENTED = 0x00020000,
84
86 RF_ENABLE = 0x00040000,
87
89 RF_STRICT = 0x00080000,
90
92 RETPOLINE_PRESENT = 0x00100000,
93
96
98 XFG_ENABLED = 0x00800000,
99
101 CASTGUARD_PRESENT = 0x01000000,
102
104 MEMCPY_PRESENT = 0x02000000,
105 };
106
108 uint32_t rva = 0;
109 uint32_t extra = 0;
110 };
111
112 using guard_functions_t = std::vector<guard_function_t>;
115
116 using dynamic_relocations_t = std::vector<std::unique_ptr<DynamicRelocation>>;
119
120 template<class PE_T>
121 static LIEF_LOCAL
122 std::unique_ptr<LoadConfiguration> parse(Parser& ctx, BinaryStream& stream);
123
125
128
131
133 uint32_t characteristics() const {
134 return characteristics_;
135 }
136
138 uint32_t size() const {
139 return characteristics_;
140 }
141
143 uint32_t timedatestamp() const {
144 return timedatestamp_;
145 }
146
148 uint16_t major_version() const {
149 return major_version_;
150 }
151
153 uint16_t minor_version() const {
154 return minor_version_;
155 }
156
159 uint32_t global_flags_clear() const {
160 return global_flags_clear_;
161 }
162
165 uint32_t global_flags_set() const {
166 return global_flags_set_;
167 }
168
171 return critical_section_default_timeout_;
172 }
173
177 return decommit_free_block_threshold_;
178 }
179
183 return decommit_total_free_threshold_;
184 }
185
189 uint64_t lock_prefix_table() const {
190 return lock_prefix_table_;
191 }
192
195 uint64_t maximum_allocation_size() const {
196 return maximum_allocation_size_;
197 }
198
200 uint64_t virtual_memory_threshold() const {
201 return virtual_memory_threshold_;
202 }
203
206 uint64_t process_affinity_mask() const {
207 return process_affinity_mask_;
208 }
209
211 uint32_t process_heap_flags() const {
212 return process_heap_flags_;
213 }
214
216 uint16_t csd_version() const {
217 return csd_version_;
218 }
219
221 uint16_t reserved1() const {
222 return reserved1_;
223 }
224
230 uint16_t dependent_load_flags() const {
231 return reserved1_;
232 }
233
235 uint64_t editlist() const {
236 return editlist_;
237 }
238
240 uint64_t security_cookie() const {
241 return security_cookie_;
242 }
243
247 return se_handler_table_;
248 }
249
253 return se_handler_count_;
254 }
255
257 const std::vector<uint32_t>& seh_functions() const {
258 return seh_rva_;
259 }
260
263 return guard_cf_check_function_pointer_;
264 }
265
268 return guard_cf_dispatch_function_pointer_;
269 }
270
274 return guard_cf_function_table_;
275 }
276
279 return guard_cf_function_count_;
280 }
281
285 return guard_cf_functions_;
286 }
287
289 return guard_cf_functions_;
290 }
291
294 return flags_;
295 }
296
298 bool has(IMAGE_GUARD flag) const {
299 if (!flags_) {
300 return false;
301 }
302 return (*flags_ & (uint32_t)flag) != 0;
303 }
304
306 std::vector<IMAGE_GUARD> guard_cf_flags_list() const;
307
310 return code_integrity_ ? &*code_integrity_ : nullptr;
311 }
312
314 return code_integrity_ ? &*code_integrity_ : nullptr;
315 }
316
319 return guard_address_taken_iat_entry_table_;
320 }
321
325 return guard_address_taken_iat_entry_count_;
326 }
327
330 return guard_address_taken_iat_entries_;
331 }
332
334 return guard_address_taken_iat_entries_;
335 }
336
339 return guard_long_jump_target_table_;
340 }
341
345 return guard_long_jump_target_count_;
346 }
347
350 return guard_long_jump_targets_;
351 }
352
354 return guard_long_jump_targets_;
355 }
356
359 return dynamic_value_reloc_table_;
360 }
361
364 return dynamic_relocs_;
365 }
366
368 return dynamic_relocs_;
369 }
370
373 return hybrid_metadata_pointer_;
374 }
375
380
383 return chpe_.get();
384 }
385
387 return chpe_.get();
388 }
389
392 return guard_rf_failure_routine_;
393 }
394
397 return guard_rf_failure_routine_function_pointer_;
398 }
399
402 return dynamic_value_reloctable_offset_;
403 }
404
407 return dynamic_value_reloctable_section_;
408 }
409
412 return reserved2_;
413 }
414
417 return guardrf_verify_stackpointer_function_pointer_;
418 }
419
422 return hotpatch_table_offset_;
423 }
424
426 return reserved3_;
427 }
428
430 return enclave_configuration_ptr_;
431 }
432
434 return enclave_config_.get();
435 }
436
438 return enclave_config_.get();
439 }
440
442 return volatile_metadata_pointer_;
443 }
444
446 return volatile_metadata_.get();
447 }
448
450 return volatile_metadata_.get();
451 }
452
454 return guard_eh_continuation_table_;
455 }
456
458 return guard_eh_continuation_count_;
459 }
460
462 return guard_eh_continuation_functions_;
463 }
464
466 return guard_eh_continuation_functions_;
467 }
468
470 return guard_xfg_check_function_pointer_;
471 }
472
474 return guard_xfg_dispatch_function_pointer_;
475 }
476
478 return guard_xfg_table_dispatch_function_pointer_;
479 }
480
482 return cast_guard_os_determined_failure_mode_;
483 }
484
486 return guard_memcpy_function_pointer_;
487 }
488
490 return uma_function_pointers_;
491 }
492
494 characteristics_ = characteristics;
495 return *this;
496 }
497
498 LoadConfiguration& size(uint32_t value) {
499 return characteristics(value);
500 }
501
503 timedatestamp_ = timedatestamp;
504 return *this;
505 }
506
508 major_version_ = major_version;
509 return *this;
510 }
511
513 minor_version_ = minor_version;
514 return *this;
515 }
516
518 global_flags_clear_ = global_flags_clear;
519 return *this;
520 }
521
523 global_flags_set_ = global_flags_set;
524 return *this;
525 }
526
528 critical_section_default_timeout_ = critical_section_default_timeout;
529 return *this;
530 }
531
533 decommit_free_block_threshold_ = decommit_free_block_threshold;
534 return *this;
535 }
536
538 decommit_total_free_threshold_ = decommit_total_free_threshold;
539 return *this;
540 }
541
543 lock_prefix_table_ = lock_prefix_table;
544 return *this;
545 }
546
548 maximum_allocation_size_ = maximum_allocation_size;
549 return *this;
550 }
551
553 virtual_memory_threshold_ = virtual_memory_threshold;
554 return *this;
555 }
556
558 process_affinity_mask_ = process_affinity_mask;
559 return *this;
560 }
561
562 LoadConfiguration& process_heap_flags(uint32_t process_heap_flagsid) {
563 process_heap_flags_ = process_heap_flagsid;
564 return *this;
565 }
566
568 csd_version_ = csd_version;
569 return *this;
570 }
571
573 reserved1_ = reserved1;
574 return *this;
575 }
576
578 reserved1(flags);
579 return *this;
580 }
581
583 editlist_ = editlist;
584 return *this;
585 }
586
588 security_cookie_ = security_cookie;
589 return *this;
590 }
591
593 se_handler_table_ = se_handler_table;
594 return *this;
595 }
596
598 se_handler_count_ = se_handler_count;
599 return *this;
600 }
601
603 guard_cf_check_function_pointer_ = check_pointer;
604 return *this;
605 }
606
608 guard_cf_dispatch_function_pointer_ = dispatch_pointer;
609 return *this;
610 }
611
613 guard_cf_function_table_ = guard_cf_function_table;
614 return *this;
615 }
616
618 guard_cf_function_count_ = guard_cf_function_count;
619 return *this;
620 }
621
623 flags_ = (uint32_t)flags;
624 return *this;
625 }
626
628 flags_ = flags;
629 return *this;
630 }
631
633 code_integrity_ = std::move(CI);
634 return *this;
635 }
636
638 guard_address_taken_iat_entry_table_ = value;
639 return *this;
640 }
641
643 guard_address_taken_iat_entry_count_ = value;
644 return *this;
645 }
646
648 guard_long_jump_target_table_ = value;
649 return *this;
650 }
651
653 guard_long_jump_target_count_ = value;
654 return *this;
655 }
656
658 dynamic_value_reloc_table_ = value;
659 return *this;
660 }
661
663 hybrid_metadata_pointer_ = value;
664 return *this;
665 }
666
668 guard_rf_failure_routine_ = value;
669 return *this;
670 }
671
673 guard_rf_failure_routine_function_pointer_ = value;
674 return *this;
675 }
676
678 dynamic_value_reloctable_offset_ = value;
679 return *this;
680 }
681
683 dynamic_value_reloctable_section_ = value;
684 return *this;
685 }
686
687 LoadConfiguration& reserved2(uint16_t value) {
688 reserved2_ = value;
689 return *this;
690 }
691
693 guardrf_verify_stackpointer_function_pointer_ = value;
694 return *this;
695 }
696
698 hotpatch_table_offset_ = value;
699 return *this;
700 }
701
702 LoadConfiguration& reserved3(uint32_t value) {
703 reserved3_ = value;
704 return *this;
705 }
706
708 enclave_configuration_ptr_ = value;
709 return *this;
710 }
711
713 volatile_metadata_pointer_ = value;
714 return *this;
715 }
716
718 guard_eh_continuation_table_ = value;
719 return *this;
720 }
721
723 guard_eh_continuation_count_ = value;
724 return *this;
725 }
726
728 guard_xfg_check_function_pointer_ = value;
729 return *this;
730 }
731
733 guard_xfg_dispatch_function_pointer_ = value;
734 return *this;
735 }
736
738 guard_xfg_table_dispatch_function_pointer_ = value;
739 return *this;
740 }
741
743 cast_guard_os_determined_failure_mode_ = value;
744 return *this;
745 }
746
748 guard_memcpy_function_pointer_ = value;
749 return *this;
750 }
751
753 uma_function_pointers_ = value;
754 return *this;
755 }
756
758
759 void accept(Visitor& visitor) const override;
760
761 std::string to_string() const;
762
763 LIEF_API friend
764 std::ostream& operator<<(std::ostream& os, const LoadConfiguration& config)
765 {
766 os << config.to_string();
767 return os;
768 }
769
771 LIEF_LOCAL static ok_error_t parse_seh_table(
772 Parser& ctx, BinaryStream& stream, LoadConfiguration& config);
773
775 LIEF_LOCAL static ok_error_t parse_guard_functions(
776 Parser& ctx, BinaryStream& stream, LoadConfiguration& config,
777 size_t count, guard_functions_t LoadConfiguration::* dst);
778
780 LIEF_LOCAL static ok_error_t parse_dyn_relocs(
781 Parser& ctx, LoadConfiguration& config);
782
784 template<uint8_t version, class PE_T>
785 LIEF_LOCAL static ok_error_t parse_dyn_relocs_entries(
786 Parser& ctx, BinaryStream& stream, LoadConfiguration& config,
787 size_t size);
788
790 template<class PE_T>
791 LIEF_LOCAL static ok_error_t parse_enclave_config(
792 Parser& ctx, LoadConfiguration& config);
793
795 LIEF_LOCAL static ok_error_t parse_volatile_metadata(
796 Parser& ctx, LoadConfiguration& config);
797
798 protected:
799 uint32_t characteristics_ = 0;
800 uint32_t timedatestamp_ = 0;
801
802 uint16_t major_version_ = 0;
803 uint16_t minor_version_ = 0;
804
805 uint32_t global_flags_clear_ = 0;
806 uint32_t global_flags_set_ = 0;
807
808 uint32_t critical_section_default_timeout_ = 0;
809
810 uint64_t decommit_free_block_threshold_ = 0;
811 uint64_t decommit_total_free_threshold_ = 0;
812
813 uint64_t lock_prefix_table_ = 0;
814 uint64_t maximum_allocation_size_ = 0;
815 uint64_t virtual_memory_threshold_ = 0;
816 uint64_t process_affinity_mask_ = 0;
817 uint32_t process_heap_flags_ = 0;
818 uint16_t csd_version_ = 0;
819 uint16_t reserved1_ = 0; // named DependentLoadFlags in recent headers
820 uint64_t editlist_ = 0;
821 uint64_t security_cookie_ = 0;
822
823 optional<uint64_t> se_handler_table_;
824 optional<uint64_t> se_handler_count_;
825
826 optional<uint64_t> guard_cf_check_function_pointer_;
827 optional<uint64_t> guard_cf_dispatch_function_pointer_;
828 optional<uint64_t> guard_cf_function_table_;
829 optional<uint64_t> guard_cf_function_count_;
830 optional<uint32_t> flags_;
831
832 optional<CodeIntegrity> code_integrity_;
833
834 optional<uint64_t> guard_address_taken_iat_entry_table_;
835 optional<uint64_t> guard_address_taken_iat_entry_count_;
836 optional<uint64_t> guard_long_jump_target_table_;
837 optional<uint64_t> guard_long_jump_target_count_;
838
839 optional<uint64_t> dynamic_value_reloc_table_;
840 optional<uint64_t> hybrid_metadata_pointer_;
841
842 optional<uint64_t> guard_rf_failure_routine_;
843 optional<uint64_t> guard_rf_failure_routine_function_pointer_;
844 optional<uint32_t> dynamic_value_reloctable_offset_;
845 optional<uint16_t> dynamic_value_reloctable_section_;
846 optional<uint16_t> reserved2_;
847
848 optional<uint64_t> guardrf_verify_stackpointer_function_pointer_;
849 optional<uint32_t> hotpatch_table_offset_;
850
851 optional<uint32_t> reserved3_;
852 optional<uint64_t> enclave_configuration_ptr_;
853
854 optional<uint64_t> volatile_metadata_pointer_;
855
856 optional<uint64_t> guard_eh_continuation_table_;
857 optional<uint64_t> guard_eh_continuation_count_;
858
859 optional<uint64_t> guard_xfg_check_function_pointer_;
860 optional<uint64_t> guard_xfg_dispatch_function_pointer_;
861 optional<uint64_t> guard_xfg_table_dispatch_function_pointer_;
862
863 optional<uint64_t> cast_guard_os_determined_failure_mode_;
864
865 optional<uint64_t> guard_memcpy_function_pointer_;
866
867 optional<uint64_t> uma_function_pointers_;
868
869 std::unique_ptr<CHPEMetadata> chpe_;
870 std::vector<uint32_t> seh_rva_;
871 guard_functions_t guard_cf_functions_;
872 guard_functions_t guard_address_taken_iat_entries_;
873 guard_functions_t guard_long_jump_targets_;
874 guard_functions_t guard_eh_continuation_functions_;
875 dynamic_relocations_t dynamic_relocs_;
876 std::unique_ptr<EnclaveConfiguration> enclave_config_;
877 std::unique_ptr<VolatileMetadata> volatile_metadata_;
878};
879
881
882}
883}
884
885#endif
Class that is used to a read stream of data from different sources.
Definition BinaryStream.hpp:33
Base class for any Compiled Hybrid Portable Executable (CHPE) metadata.
Definition PE/LoadConfigurations/CHPEMetadata/Metadata.hpp:32
Definition CodeIntegrity.hpp:31
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:46
LoadConfiguration & guard_cf_function_count(uint64_t guard_cf_function_count)
Definition LoadConfiguration.hpp:617
static std::unique_ptr< LoadConfiguration > parse(Parser &ctx, BinaryStream &stream)
std::vector< guard_function_t > guard_functions_t
Definition LoadConfiguration.hpp:112
optional< uint64_t > guard_eh_continuation_table() const
Definition LoadConfiguration.hpp:453
optional< uint64_t > chpe_metadata_pointer() const
VA to the extra Compiled Hybrid Portable Executable (CHPE) metadata.
Definition LoadConfiguration.hpp:377
ref_iterator< guard_functions_t & > it_guard_functions
Definition LoadConfiguration.hpp:113
LoadConfiguration & guard_eh_continuation_count(uint64_t value)
Definition LoadConfiguration.hpp:722
LoadConfiguration & operator=(const LoadConfiguration &)
optional< uint64_t > guard_xfg_dispatch_function_pointer() const
Definition LoadConfiguration.hpp:473
LoadConfiguration & guard_cf_check_function_pointer(uint64_t check_pointer)
Definition LoadConfiguration.hpp:602
optional< uint64_t > uma_function_pointers() const
Definition LoadConfiguration.hpp:489
std::string to_string() const
LoadConfiguration & dynamic_value_reloctable_section(uint16_t value)
Definition LoadConfiguration.hpp:682
LoadConfiguration & decommit_free_block_threshold(uint64_t decommit_free_block_threshold)
Definition LoadConfiguration.hpp:532
LoadConfiguration & guard_long_jump_target_table(uint64_t value)
Definition LoadConfiguration.hpp:647
it_dynamic_relocations_t dynamic_relocations()
Return an iterator over the Dynamic relocations (DVRT).
Definition LoadConfiguration.hpp:363
uint32_t characteristics() const
Characteristics of the structure which is defined by its size.
Definition LoadConfiguration.hpp:133
optional< uint64_t > guard_long_jump_target_table() const
The VA where Control Flow Guard long jump target table is stored.
Definition LoadConfiguration.hpp:338
LoadConfiguration & maximum_allocation_size(uint64_t maximum_allocation_size)
Definition LoadConfiguration.hpp:547
LoadConfiguration & security_cookie(uint64_t security_cookie)
Definition LoadConfiguration.hpp:587
CodeIntegrity * code_integrity()
Definition LoadConfiguration.hpp:313
uint32_t critical_section_default_timeout() const
The critical section default time-out value.
Definition LoadConfiguration.hpp:170
LoadConfiguration & guard_xfg_dispatch_function_pointer(uint64_t value)
Definition LoadConfiguration.hpp:732
LoadConfiguration & operator=(LoadConfiguration &&)
const_ref_iterator< const dynamic_relocations_t &, const DynamicRelocation * > it_const_dynamic_relocations_t
Definition LoadConfiguration.hpp:118
LoadConfiguration & guard_long_jump_target_count(uint64_t value)
Definition LoadConfiguration.hpp:652
uint64_t security_cookie() const
A pointer to a cookie that is used by Visual C++ or GS implementation.
Definition LoadConfiguration.hpp:240
LoadConfiguration & decommit_total_free_threshold(uint64_t decommit_total_free_threshold)
Definition LoadConfiguration.hpp:537
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:318
LoadConfiguration & guard_rf_verify_stackpointer_function_pointer(uint64_t value)
Definition LoadConfiguration.hpp:692
optional< uint64_t > guard_memcpy_function_pointer() const
Definition LoadConfiguration.hpp:485
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:176
ref_iterator< dynamic_relocations_t &, DynamicRelocation * > it_dynamic_relocations_t
Definition LoadConfiguration.hpp:117
std::vector< IMAGE_GUARD > guard_cf_flags_list() const
List of flags.
LoadConfiguration & hybrid_metadata_pointer(uint64_t value)
Definition LoadConfiguration.hpp:662
optional< uint32_t > dynamic_value_reloctable_offset() const
Offset of dynamic relocation table relative to the relocation table.
Definition LoadConfiguration.hpp:401
LoadConfiguration & se_handler_table(uint64_t se_handler_table)
Definition LoadConfiguration.hpp:592
LoadConfiguration & guard_cf_function_table(uint64_t guard_cf_function_table)
Definition LoadConfiguration.hpp:612
LoadConfiguration & reserved2(uint16_t value)
Definition LoadConfiguration.hpp:687
const std::vector< uint32_t > & seh_functions() const
Return the list of the function RVA in the SEH table (if any).
Definition LoadConfiguration.hpp:257
LoadConfiguration & enclave_configuration_ptr(uint64_t value)
Definition LoadConfiguration.hpp:707
LoadConfiguration & characteristics(uint32_t characteristics)
Definition LoadConfiguration.hpp:493
uint64_t process_affinity_mask() const
The process affinity mask. For more information, see GetProcessAffinityMask. This member is available...
Definition LoadConfiguration.hpp:206
optional< uint64_t > guard_cf_check_function_pointer() const
The VA where Control Flow Guard check-function pointer is stored.
Definition LoadConfiguration.hpp:262
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:252
LoadConfiguration & guard_flags(IMAGE_GUARD flags)
Definition LoadConfiguration.hpp:622
optional< uint64_t > enclave_configuration_ptr() const
Definition LoadConfiguration.hpp:429
LoadConfiguration & lock_prefix_table(uint64_t lock_prefix_table)
Definition LoadConfiguration.hpp:542
LoadConfiguration & dynamic_value_reloctable_offset(uint32_t value)
Definition LoadConfiguration.hpp:677
LoadConfiguration & global_flags_set(uint32_t global_flags_set)
Definition LoadConfiguration.hpp:522
LoadConfiguration & guard_memcpy_function_pointer(uint64_t value)
Definition LoadConfiguration.hpp:747
const EnclaveConfiguration * enclave_config() const
Definition LoadConfiguration.hpp:433
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:195
LoadConfiguration & code_integrity(CodeIntegrity CI)
Definition LoadConfiguration.hpp:632
CHPEMetadata * chpe_metadata()
Definition LoadConfiguration.hpp:386
optional< uint64_t > guard_xfg_check_function_pointer() const
Definition LoadConfiguration.hpp:469
LoadConfiguration & guard_rf_failure_routine(uint64_t value)
Definition LoadConfiguration.hpp:667
LoadConfiguration & reserved3(uint32_t value)
Definition LoadConfiguration.hpp:702
uint16_t minor_version() const
Minor version.
Definition LoadConfiguration.hpp:153
LoadConfiguration & guard_flags(uint32_t flags)
Definition LoadConfiguration.hpp:627
optional< uint64_t > guard_rf_failure_routine() const
VA of the failure routine.
Definition LoadConfiguration.hpp:391
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:273
it_const_guard_functions guard_address_taken_iat_entries() const
List of RVA pointed by guard_address_taken_iat_entry_table().
Definition LoadConfiguration.hpp:329
it_const_guard_functions guard_cf_functions() const
Iterator over the Control Flow Guard functions referenced by guard_cf_function_table().
Definition LoadConfiguration.hpp:284
it_guard_functions guard_long_jump_targets()
Definition LoadConfiguration.hpp:353
uint32_t timedatestamp() const
The date and time stamp value.
Definition LoadConfiguration.hpp:143
const CHPEMetadata * chpe_metadata() const
Compiled Hybrid Portable Executable (CHPE) metadata (if any).
Definition LoadConfiguration.hpp:382
uint32_t size() const
Size of the current structure.
Definition LoadConfiguration.hpp:138
uint16_t csd_version() const
The service pack version.
Definition LoadConfiguration.hpp:216
LoadConfiguration & guard_rf_failure_routine_function_pointer(uint64_t value)
Definition LoadConfiguration.hpp:672
uint64_t editlist() const
Reserved for use by the system.
Definition LoadConfiguration.hpp:235
uint32_t global_flags_set() const
The global flags that control system behavior. For more information, see Gflags.exe.
Definition LoadConfiguration.hpp:165
optional< uint16_t > dynamic_value_reloctable_section() const
The section index of the dynamic value relocation table.
Definition LoadConfiguration.hpp:406
it_const_dynamic_relocations_t dynamic_relocations() const
Definition LoadConfiguration.hpp:367
LoadConfiguration & virtual_memory_threshold(uint64_t virtual_memory_threshold)
Definition LoadConfiguration.hpp:552
uint64_t virtual_memory_threshold() const
The maximum block size that can be allocated from heap segments, in bytes.
Definition LoadConfiguration.hpp:200
LoadConfiguration(LoadConfiguration &&)
void accept(Visitor &visitor) const override
LoadConfiguration & size(uint32_t value)
Definition LoadConfiguration.hpp:498
LoadConfiguration & timedatestamp(uint32_t timedatestamp)
Definition LoadConfiguration.hpp:502
LoadConfiguration & csd_version(uint16_t csd_version)
Definition LoadConfiguration.hpp:567
LoadConfiguration & editlist(uint64_t editlist)
Definition LoadConfiguration.hpp:582
optional< uint32_t > hotpatch_table_offset() const
Offset to the hotpatch table.
Definition LoadConfiguration.hpp:421
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:182
it_const_guard_functions guard_long_jump_targets() const
List of RVA pointed by guard_address_taken_iat_entry_table().
Definition LoadConfiguration.hpp:349
const VolatileMetadata * volatile_metadata() const
Definition LoadConfiguration.hpp:445
optional< uint64_t > hybrid_metadata_pointer() const
Alias for chpe_metadata_pointer().
Definition LoadConfiguration.hpp:372
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:189
optional< uint16_t > reserved2() const
Must be zero.
Definition LoadConfiguration.hpp:411
LoadConfiguration & uma_function_pointers(uint64_t value)
Definition LoadConfiguration.hpp:752
optional< uint64_t > guard_xfg_table_dispatch_function_pointer() const
Definition LoadConfiguration.hpp:477
it_const_guard_functions guard_eh_continuation_functions() const
Definition LoadConfiguration.hpp:461
optional< uint64_t > guard_rf_failure_routine_function_pointer() const
VA of the failure routine fptr.
Definition LoadConfiguration.hpp:396
EnclaveConfiguration * enclave_config()
Definition LoadConfiguration.hpp:437
LoadConfiguration & dependent_load_flags(uint16_t flags)
Definition LoadConfiguration.hpp:577
LoadConfiguration & reserved1(uint16_t reserved1)
Definition LoadConfiguration.hpp:572
friend class Parser
Definition LoadConfiguration.hpp:48
LoadConfiguration & cast_guard_os_determined_failure_mode(uint64_t value)
Definition LoadConfiguration.hpp:742
uint32_t global_flags_clear() const
The global flags that control system behavior. For more information, see Gflags.exe.
Definition LoadConfiguration.hpp:159
LoadConfiguration & guard_address_taken_iat_entry_count(uint64_t value)
Definition LoadConfiguration.hpp:642
uint16_t major_version() const
Major version.
Definition LoadConfiguration.hpp:148
bool has(IMAGE_GUARD flag) const
Check if the given flag is present.
Definition LoadConfiguration.hpp:298
LoadConfiguration & guard_address_taken_iat_entry_table(uint64_t value)
Definition LoadConfiguration.hpp:637
LoadConfiguration & guard_xfg_table_dispatch_function_pointer(uint64_t value)
Definition LoadConfiguration.hpp:737
LoadConfiguration & process_affinity_mask(uint64_t process_affinity_mask)
Definition LoadConfiguration.hpp:557
LoadConfiguration & guard_xfg_check_function_pointer(uint64_t value)
Definition LoadConfiguration.hpp:727
LoadConfiguration & hotpatch_table_offset(uint32_t value)
Definition LoadConfiguration.hpp:697
LoadConfiguration & global_flags_clear(uint32_t global_flags_clear)
Definition LoadConfiguration.hpp:517
VolatileMetadata * volatile_metadata()
Definition LoadConfiguration.hpp:449
uint32_t process_heap_flags() const
The process heap flags. For more information, see HeapCreate.
Definition LoadConfiguration.hpp:211
uint16_t dependent_load_flags() const
Alias for reserved1().
Definition LoadConfiguration.hpp:230
LoadConfiguration & volatile_metadata_pointer(uint64_t value)
Definition LoadConfiguration.hpp:712
IMAGE_GUARD
Definition LoadConfiguration.hpp:50
@ RF_ENABLE
Module requests that the OS enable return flow protection.
Definition LoadConfiguration.hpp:86
@ RF_INSTRUMENTED
Module contains return flow instrumentation and metadata.
Definition LoadConfiguration.hpp:83
@ RF_STRICT
Module requests that the OS enable return flow protection in strict mode.
Definition LoadConfiguration.hpp:89
@ CASTGUARD_PRESENT
Module has CastGuard instrumentation present.
Definition LoadConfiguration.hpp:101
@ PROTECT_DELAYLOAD_IAT
Module supports read only delay load IAT.
Definition LoadConfiguration.hpp:66
@ DELAYLOAD_IAT_IN_ITS_OWN_SECTION
Delayload import table in its own .didat section (with nothing else in it) that can be freely reprote...
Definition LoadConfiguration.hpp:70
@ CF_EXPORT_SUPPRESSION_INFO_PRESENT
Module contains suppressed export information. This also infers that the address taken IAT table is a...
Definition LoadConfiguration.hpp:74
@ CF_INSTRUMENTED
Module performs control flow integrity checks using system-supplied support.
Definition LoadConfiguration.hpp:54
@ EH_CONTINUATION_TABLE_PRESENT
Module contains EH continuation target information.
Definition LoadConfiguration.hpp:95
@ RETPOLINE_PRESENT
Module was built with retpoline support.
Definition LoadConfiguration.hpp:92
@ MEMCPY_PRESENT
Module has Guarded Memcpy instrumentation present.
Definition LoadConfiguration.hpp:104
@ XFG_ENABLED
Module was built with xfg (deprecated).
Definition LoadConfiguration.hpp:98
@ CF_LONGJUMP_TABLE_PRESENT
Module contains longjmp target information.
Definition LoadConfiguration.hpp:80
@ CF_FUNCTION_TABLE_PRESENT
Module contains valid control flow target metadata.
Definition LoadConfiguration.hpp:60
@ NONE
Definition LoadConfiguration.hpp:51
@ SECURITY_COOKIE_UNUSED
Module does not make use of the /GS security cookie.
Definition LoadConfiguration.hpp:63
@ CFW_INSTRUMENTED
Module performs control flow and write integrity checks.
Definition LoadConfiguration.hpp:57
@ CF_ENABLE_EXPORT_SUPPRESSION
Module enables suppression of exports.
Definition LoadConfiguration.hpp:77
optional< uint64_t > volatile_metadata_pointer() const
Definition LoadConfiguration.hpp:441
optional< uint64_t > cast_guard_os_determined_failure_mode() const
Definition LoadConfiguration.hpp:481
it_guard_functions guard_address_taken_iat_entries()
Definition LoadConfiguration.hpp:333
LoadConfiguration & guard_cf_dispatch_function_pointer(uint64_t dispatch_pointer)
Definition LoadConfiguration.hpp:607
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:324
const_ref_iterator< const guard_functions_t & > it_const_guard_functions
Definition LoadConfiguration.hpp:114
LoadConfiguration & se_handler_count(uint64_t se_handler_count)
Definition LoadConfiguration.hpp:597
LoadConfiguration & minor_version(uint16_t minor_version)
Definition LoadConfiguration.hpp:512
LoadConfiguration & process_heap_flags(uint32_t process_heap_flagsid)
Definition LoadConfiguration.hpp:562
friend std::ostream & operator<<(std::ostream &os, const LoadConfiguration &config)
Definition LoadConfiguration.hpp:764
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:246
const CodeIntegrity * code_integrity() const
Code integrity information.
Definition LoadConfiguration.hpp:309
optional< uint64_t > dynamic_value_reloc_table() const
VA pointing to a IMAGE_DYNAMIC_RELOCATION_TABLE.
Definition LoadConfiguration.hpp:358
LoadConfiguration & major_version(uint16_t major_version)
Definition LoadConfiguration.hpp:507
LoadConfiguration & guard_eh_continuation_table(uint64_t value)
Definition LoadConfiguration.hpp:717
LoadConfiguration & dynamic_value_reloc_table(uint64_t value)
Definition LoadConfiguration.hpp:657
it_guard_functions guard_cf_functions()
Definition LoadConfiguration.hpp:288
LoadConfiguration & critical_section_default_timeout(uint32_t critical_section_default_timeout)
Definition LoadConfiguration.hpp:527
optional< uint64_t > guard_rf_verify_stackpointer_function_pointer() const
VA of the Function verifying the stack pointer.
Definition LoadConfiguration.hpp:416
optional< uint64_t > guard_cf_dispatch_function_pointer() const
The VA where Control Flow Guard dispatch-function pointer is stored.
Definition LoadConfiguration.hpp:267
std::vector< std::unique_ptr< DynamicRelocation > > dynamic_relocations_t
Definition LoadConfiguration.hpp:116
uint16_t reserved1() const
See: dependent_load_flags().
Definition LoadConfiguration.hpp:221
optional< uint64_t > guard_eh_continuation_count() const
Definition LoadConfiguration.hpp:457
it_guard_functions guard_eh_continuation_functions()
Definition LoadConfiguration.hpp:465
optional< uint32_t > guard_flags() const
Control Flow Guard related flags.
Definition LoadConfiguration.hpp:293
LoadConfiguration(const LoadConfiguration &)
optional< uint32_t > reserved3() const
Definition LoadConfiguration.hpp:425
optional< uint64_t > guard_cf_function_count() const
The count of unique RVAs in the guard_cf_function_table() table.
Definition LoadConfiguration.hpp:278
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:344
Main interface to parse PE binaries. In particular the static functions: Parser::parse should be used...
Definition PE/Parser.hpp:52
This class represents volatile metadata which can be enabled at link time with /volatileMetadata.
Definition VolatileMetadata.hpp:35
Definition Visitor.hpp:210
Opaque structure that is used by LIEF to avoid writing result<void> f(...). Instead,...
Definition errors.hpp:112
Definition optional.hpp:23
Iterator which returns reference on container's values.
Definition iterators.hpp:46
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:40
ref_iterator< CT, U, typename decay_t< CT >::const_iterator > const_ref_iterator
Iterator which return const ref on container's values.
Definition iterators.hpp:257
Definition LoadConfiguration.hpp:107
uint32_t extra
Definition LoadConfiguration.hpp:109
uint32_t rva
Definition LoadConfiguration.hpp:108
#define LIEF_API
Definition visibility.h:41
#define LIEF_LOCAL
Definition visibility.h:42