LIEF: Library to Instrument Executable Formats Version 1.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 <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
48 public:
49 friend class Parser;
50
51 enum class IMAGE_GUARD : uint32_t {
52 NONE = 0x00000000,
55 CF_INSTRUMENTED = 0x100,
56
58 CFW_INSTRUMENTED = 0x200,
59
61 CF_FUNCTION_TABLE_PRESENT = 0x400,
62
64 SECURITY_COOKIE_UNUSED = 0x800,
65
67 PROTECT_DELAYLOAD_IAT = 0x1000,
68
71 DELAYLOAD_IAT_IN_ITS_OWN_SECTION = 0x2000,
72
75 CF_EXPORT_SUPPRESSION_INFO_PRESENT = 0x4000,
76
78 CF_ENABLE_EXPORT_SUPPRESSION = 0x8000,
79
81 CF_LONGJUMP_TABLE_PRESENT = 0x10000,
82
84 RF_INSTRUMENTED = 0x00020000,
85
87 RF_ENABLE = 0x00040000,
88
90 RF_STRICT = 0x00080000,
91
93 RETPOLINE_PRESENT = 0x00100000,
94
96 EH_CONTINUATION_TABLE_PRESENT = 0x400000,
97
99 XFG_ENABLED = 0x00800000,
100
102 CASTGUARD_PRESENT = 0x01000000,
103
105 MEMCPY_PRESENT = 0x02000000,
106 };
107
109 uint32_t rva = 0;
110 uint32_t extra = 0;
111 };
112
113 using guard_functions_t = std::vector<guard_function_t>;
116
117 using dynamic_relocations_t = std::vector<std::unique_ptr<DynamicRelocation>>;
122
123 template<class PE_T>
124 static LIEF_LOCAL std::unique_ptr<LoadConfiguration> parse(Parser& ctx,
125 BinaryStream& stream);
126
128
131
134
136 uint32_t characteristics() const {
137 return characteristics_;
138 }
139
141 uint32_t size() const {
142 return characteristics_;
143 }
144
146 uint32_t timedatestamp() const {
147 return timedatestamp_;
148 }
149
151 uint16_t major_version() const {
152 return major_version_;
153 }
154
156 uint16_t minor_version() const {
157 return minor_version_;
158 }
159
162 uint32_t global_flags_clear() const {
163 return global_flags_clear_;
164 }
165
168 uint32_t global_flags_set() const {
169 return global_flags_set_;
170 }
171
174 return critical_section_default_timeout_;
175 }
176
180 return decommit_free_block_threshold_;
181 }
182
186 return decommit_total_free_threshold_;
187 }
188
192 uint64_t lock_prefix_table() const {
193 return lock_prefix_table_;
194 }
195
198 uint64_t maximum_allocation_size() const {
199 return maximum_allocation_size_;
200 }
201
203 uint64_t virtual_memory_threshold() const {
204 return virtual_memory_threshold_;
205 }
206
209 uint64_t process_affinity_mask() const {
210 return process_affinity_mask_;
211 }
212
214 uint32_t process_heap_flags() const {
215 return process_heap_flags_;
216 }
217
219 uint16_t csd_version() const {
220 return csd_version_;
221 }
222
224 uint16_t reserved1() const {
225 return reserved1_;
226 }
227
233 uint16_t dependent_load_flags() const {
234 return reserved1_;
235 }
236
238 uint64_t editlist() const {
239 return editlist_;
240 }
241
243 uint64_t security_cookie() const {
244 return security_cookie_;
245 }
246
250 return se_handler_table_;
251 }
252
256 return se_handler_count_;
257 }
258
260 const std::vector<uint32_t>& seh_functions() const {
261 return seh_rva_;
262 }
263
266 return guard_cf_check_function_pointer_;
267 }
268
271 return guard_cf_dispatch_function_pointer_;
272 }
273
277 return guard_cf_function_table_;
278 }
279
282 return guard_cf_function_count_;
283 }
284
288 return guard_cf_functions_;
289 }
290
292 return guard_cf_functions_;
293 }
294
297 return flags_;
298 }
299
301 bool has(IMAGE_GUARD flag) const {
302 if (!flags_) {
303 return false;
304 }
305 return (*flags_ & (uint32_t)flag) != 0;
306 }
307
309 std::vector<IMAGE_GUARD> guard_cf_flags_list() const;
310
313 return code_integrity_ ? &*code_integrity_ : nullptr;
314 }
315
317 return code_integrity_ ? &*code_integrity_ : nullptr;
318 }
319
322 return guard_address_taken_iat_entry_table_;
323 }
324
328 return guard_address_taken_iat_entry_count_;
329 }
330
333 return guard_address_taken_iat_entries_;
334 }
335
337 return guard_address_taken_iat_entries_;
338 }
339
342 return guard_long_jump_target_table_;
343 }
344
348 return guard_long_jump_target_count_;
349 }
350
353 return guard_long_jump_targets_;
354 }
355
357 return guard_long_jump_targets_;
358 }
359
362 return dynamic_value_reloc_table_;
363 }
364
367 return dynamic_relocs_;
368 }
369
371 return dynamic_relocs_;
372 }
373
376 return hybrid_metadata_pointer_;
377 }
378
383
386 return chpe_.get();
387 }
388
390 return chpe_.get();
391 }
392
395 return guard_rf_failure_routine_;
396 }
397
400 return guard_rf_failure_routine_function_pointer_;
401 }
402
405 return dynamic_value_reloctable_offset_;
406 }
407
410 return dynamic_value_reloctable_section_;
411 }
412
415 return reserved2_;
416 }
417
420 return guardrf_verify_stackpointer_function_pointer_;
421 }
422
425 return hotpatch_table_offset_;
426 }
427
429 return reserved3_;
430 }
431
433 return enclave_configuration_ptr_;
434 }
435
437 return enclave_config_.get();
438 }
439
441 return enclave_config_.get();
442 }
443
445 return volatile_metadata_pointer_;
446 }
447
449 return volatile_metadata_.get();
450 }
451
453 return volatile_metadata_.get();
454 }
455
457 return guard_eh_continuation_table_;
458 }
459
461 return guard_eh_continuation_count_;
462 }
463
465 return guard_eh_continuation_functions_;
466 }
467
469 return guard_eh_continuation_functions_;
470 }
471
473 return guard_xfg_check_function_pointer_;
474 }
475
477 return guard_xfg_dispatch_function_pointer_;
478 }
479
481 return guard_xfg_table_dispatch_function_pointer_;
482 }
483
485 return cast_guard_os_determined_failure_mode_;
486 }
487
489 return guard_memcpy_function_pointer_;
490 }
491
493 return uma_function_pointers_;
494 }
495
497 characteristics_ = characteristics;
498 return *this;
499 }
500
501 LoadConfiguration& size(uint32_t value) {
502 return characteristics(value);
503 }
504
506 timedatestamp_ = timedatestamp;
507 return *this;
508 }
509
511 major_version_ = major_version;
512 return *this;
513 }
514
516 minor_version_ = minor_version;
517 return *this;
518 }
519
521 global_flags_clear_ = global_flags_clear;
522 return *this;
523 }
524
526 global_flags_set_ = global_flags_set;
527 return *this;
528 }
529
532 critical_section_default_timeout_ = critical_section_default_timeout;
533 return *this;
534 }
535
538 decommit_free_block_threshold_ = decommit_free_block_threshold;
539 return *this;
540 }
541
544 decommit_total_free_threshold_ = decommit_total_free_threshold;
545 return *this;
546 }
547
549 lock_prefix_table_ = lock_prefix_table;
550 return *this;
551 }
552
554 maximum_allocation_size_ = maximum_allocation_size;
555 return *this;
556 }
557
559 virtual_memory_threshold_ = virtual_memory_threshold;
560 return *this;
561 }
562
564 process_affinity_mask_ = process_affinity_mask;
565 return *this;
566 }
567
568 LoadConfiguration& process_heap_flags(uint32_t process_heap_flagsid) {
569 process_heap_flags_ = process_heap_flagsid;
570 return *this;
571 }
572
574 csd_version_ = csd_version;
575 return *this;
576 }
577
579 reserved1_ = reserved1;
580 return *this;
581 }
582
584 reserved1(flags);
585 return *this;
586 }
587
589 editlist_ = editlist;
590 return *this;
591 }
592
594 security_cookie_ = security_cookie;
595 return *this;
596 }
597
599 se_handler_table_ = se_handler_table;
600 return *this;
601 }
602
604 se_handler_count_ = se_handler_count;
605 return *this;
606 }
607
609 guard_cf_check_function_pointer_ = check_pointer;
610 return *this;
611 }
612
614 guard_cf_dispatch_function_pointer(uint64_t dispatch_pointer) {
615 guard_cf_dispatch_function_pointer_ = dispatch_pointer;
616 return *this;
617 }
618
620 guard_cf_function_table_ = guard_cf_function_table;
621 return *this;
622 }
623
625 guard_cf_function_count_ = guard_cf_function_count;
626 return *this;
627 }
628
630 flags_ = (uint32_t)flags;
631 return *this;
632 }
633
635 flags_ = flags;
636 return *this;
637 }
638
640 code_integrity_ = std::move(CI);
641 return *this;
642 }
643
645 guard_address_taken_iat_entry_table_ = value;
646 return *this;
647 }
648
650 guard_address_taken_iat_entry_count_ = value;
651 return *this;
652 }
653
655 guard_long_jump_target_table_ = value;
656 return *this;
657 }
658
660 guard_long_jump_target_count_ = value;
661 return *this;
662 }
663
665 dynamic_value_reloc_table_ = value;
666 return *this;
667 }
668
670 hybrid_metadata_pointer_ = value;
671 return *this;
672 }
673
675 guard_rf_failure_routine_ = value;
676 return *this;
677 }
678
680 guard_rf_failure_routine_function_pointer_ = value;
681 return *this;
682 }
683
685 dynamic_value_reloctable_offset_ = value;
686 return *this;
687 }
688
690 dynamic_value_reloctable_section_ = value;
691 return *this;
692 }
693
694 LoadConfiguration& reserved2(uint16_t value) {
695 reserved2_ = value;
696 return *this;
697 }
698
701 guardrf_verify_stackpointer_function_pointer_ = value;
702 return *this;
703 }
704
706 hotpatch_table_offset_ = value;
707 return *this;
708 }
709
710 LoadConfiguration& reserved3(uint32_t value) {
711 reserved3_ = value;
712 return *this;
713 }
714
716 enclave_configuration_ptr_ = value;
717 return *this;
718 }
719
721 volatile_metadata_pointer_ = value;
722 return *this;
723 }
724
726 guard_eh_continuation_table_ = value;
727 return *this;
728 }
729
731 guard_eh_continuation_count_ = value;
732 return *this;
733 }
734
736 guard_xfg_check_function_pointer_ = value;
737 return *this;
738 }
739
741 guard_xfg_dispatch_function_pointer_ = value;
742 return *this;
743 }
744
746 guard_xfg_table_dispatch_function_pointer_ = value;
747 return *this;
748 }
749
751 cast_guard_os_determined_failure_mode_ = value;
752 return *this;
753 }
754
756 guard_memcpy_function_pointer_ = value;
757 return *this;
758 }
759
761 uma_function_pointers_ = value;
762 return *this;
763 }
764
766
767 void accept(Visitor& visitor) const override;
768
769 std::string to_string() const;
770
771 LIEF_API friend std::ostream& operator<<(std::ostream& os,
772 const LoadConfiguration& config) {
773 os << config.to_string();
774 return os;
775 }
776
778 LIEF_LOCAL static ok_error_t parse_seh_table(Parser& ctx, BinaryStream& stream,
779 LoadConfiguration& config);
780
783 parse_guard_functions(Parser& ctx, BinaryStream& stream,
784 LoadConfiguration& config, size_t count,
785 guard_functions_t LoadConfiguration::* dst);
786
788 LIEF_LOCAL static ok_error_t parse_dyn_relocs(Parser& ctx,
789 LoadConfiguration& config);
790
792 template<uint8_t version, class PE_T>
794 parse_dyn_relocs_entries(Parser& ctx, BinaryStream& stream,
795 LoadConfiguration& config, size_t size);
796
798 template<class PE_T>
799 LIEF_LOCAL static ok_error_t parse_enclave_config(Parser& ctx,
800 LoadConfiguration& config);
801
803 LIEF_LOCAL static ok_error_t parse_volatile_metadata(Parser& ctx,
804 LoadConfiguration& config);
805
806 protected:
807 uint32_t characteristics_ = 0;
808 uint32_t timedatestamp_ = 0;
809
810 uint16_t major_version_ = 0;
811 uint16_t minor_version_ = 0;
812
813 uint32_t global_flags_clear_ = 0;
814 uint32_t global_flags_set_ = 0;
815
816 uint32_t critical_section_default_timeout_ = 0;
817
818 uint64_t decommit_free_block_threshold_ = 0;
819 uint64_t decommit_total_free_threshold_ = 0;
820
821 uint64_t lock_prefix_table_ = 0;
822 uint64_t maximum_allocation_size_ = 0;
823 uint64_t virtual_memory_threshold_ = 0;
824 uint64_t process_affinity_mask_ = 0;
825 uint32_t process_heap_flags_ = 0;
826 uint16_t csd_version_ = 0;
827 uint16_t reserved1_ = 0; // named DependentLoadFlags in recent headers
828 uint64_t editlist_ = 0;
829 uint64_t security_cookie_ = 0;
830
831 optional<uint64_t> se_handler_table_;
832 optional<uint64_t> se_handler_count_;
833
834 optional<uint64_t> guard_cf_check_function_pointer_;
835 optional<uint64_t> guard_cf_dispatch_function_pointer_;
836 optional<uint64_t> guard_cf_function_table_;
837 optional<uint64_t> guard_cf_function_count_;
838 optional<uint32_t> flags_;
839
840 optional<CodeIntegrity> code_integrity_;
841
842 optional<uint64_t> guard_address_taken_iat_entry_table_;
843 optional<uint64_t> guard_address_taken_iat_entry_count_;
844 optional<uint64_t> guard_long_jump_target_table_;
845 optional<uint64_t> guard_long_jump_target_count_;
846
847 optional<uint64_t> dynamic_value_reloc_table_;
848 optional<uint64_t> hybrid_metadata_pointer_;
849
850 optional<uint64_t> guard_rf_failure_routine_;
851 optional<uint64_t> guard_rf_failure_routine_function_pointer_;
852 optional<uint32_t> dynamic_value_reloctable_offset_;
853 optional<uint16_t> dynamic_value_reloctable_section_;
854 optional<uint16_t> reserved2_;
855
856 optional<uint64_t> guardrf_verify_stackpointer_function_pointer_;
857 optional<uint32_t> hotpatch_table_offset_;
858
859 optional<uint32_t> reserved3_;
860 optional<uint64_t> enclave_configuration_ptr_;
861
862 optional<uint64_t> volatile_metadata_pointer_;
863
864 optional<uint64_t> guard_eh_continuation_table_;
865 optional<uint64_t> guard_eh_continuation_count_;
866
867 optional<uint64_t> guard_xfg_check_function_pointer_;
868 optional<uint64_t> guard_xfg_dispatch_function_pointer_;
869 optional<uint64_t> guard_xfg_table_dispatch_function_pointer_;
870
871 optional<uint64_t> cast_guard_os_determined_failure_mode_;
872
873 optional<uint64_t> guard_memcpy_function_pointer_;
874
875 optional<uint64_t> uma_function_pointers_;
876
877 std::unique_ptr<CHPEMetadata> chpe_;
878 std::vector<uint32_t> seh_rva_;
879 guard_functions_t guard_cf_functions_;
880 guard_functions_t guard_address_taken_iat_entries_;
881 guard_functions_t guard_long_jump_targets_;
882 guard_functions_t guard_eh_continuation_functions_;
883 dynamic_relocations_t dynamic_relocs_;
884 std::unique_ptr<EnclaveConfiguration> enclave_config_;
885 std::unique_ptr<VolatileMetadata> volatile_metadata_;
886};
887
889
890}
891}
892
893#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:47
LoadConfiguration & guard_cf_function_count(uint64_t guard_cf_function_count)
Definition LoadConfiguration.hpp:624
static std::unique_ptr< LoadConfiguration > parse(Parser &ctx, BinaryStream &stream)
std::vector< guard_function_t > guard_functions_t
Definition LoadConfiguration.hpp:113
optional< uint64_t > guard_eh_continuation_table() const
Definition LoadConfiguration.hpp:456
optional< uint64_t > chpe_metadata_pointer() const
VA to the extra Compiled Hybrid Portable Executable (CHPE) metadata.
Definition LoadConfiguration.hpp:380
ref_iterator< guard_functions_t & > it_guard_functions
Definition LoadConfiguration.hpp:114
LoadConfiguration & guard_eh_continuation_count(uint64_t value)
Definition LoadConfiguration.hpp:730
LoadConfiguration & operator=(const LoadConfiguration &)
optional< uint64_t > guard_xfg_dispatch_function_pointer() const
Definition LoadConfiguration.hpp:476
LoadConfiguration & guard_cf_check_function_pointer(uint64_t check_pointer)
Definition LoadConfiguration.hpp:608
optional< uint64_t > uma_function_pointers() const
Definition LoadConfiguration.hpp:492
std::string to_string() const
LoadConfiguration & dynamic_value_reloctable_section(uint16_t value)
Definition LoadConfiguration.hpp:689
LoadConfiguration & decommit_free_block_threshold(uint64_t decommit_free_block_threshold)
Definition LoadConfiguration.hpp:537
LoadConfiguration & guard_long_jump_target_table(uint64_t value)
Definition LoadConfiguration.hpp:654
it_dynamic_relocations_t dynamic_relocations()
Return an iterator over the Dynamic relocations (DVRT).
Definition LoadConfiguration.hpp:366
uint32_t characteristics() const
Characteristics of the structure which is defined by its size.
Definition LoadConfiguration.hpp:136
optional< uint64_t > guard_long_jump_target_table() const
The VA where Control Flow Guard long jump target table is stored.
Definition LoadConfiguration.hpp:341
LoadConfiguration & maximum_allocation_size(uint64_t maximum_allocation_size)
Definition LoadConfiguration.hpp:553
LoadConfiguration & security_cookie(uint64_t security_cookie)
Definition LoadConfiguration.hpp:593
CodeIntegrity * code_integrity()
Definition LoadConfiguration.hpp:316
ref_iterator< dynamic_relocations_t &, DynamicRelocation * > it_dynamic_relocations_t
Definition LoadConfiguration.hpp:118
uint32_t critical_section_default_timeout() const
The critical section default time-out value.
Definition LoadConfiguration.hpp:173
LoadConfiguration & guard_xfg_dispatch_function_pointer(uint64_t value)
Definition LoadConfiguration.hpp:740
LoadConfiguration & operator=(LoadConfiguration &&)
LoadConfiguration & guard_long_jump_target_count(uint64_t value)
Definition LoadConfiguration.hpp:659
uint64_t security_cookie() const
A pointer to a cookie that is used by Visual C++ or GS implementation.
Definition LoadConfiguration.hpp:243
LoadConfiguration & decommit_total_free_threshold(uint64_t decommit_total_free_threshold)
Definition LoadConfiguration.hpp:543
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:321
LoadConfiguration & guard_rf_verify_stackpointer_function_pointer(uint64_t value)
Definition LoadConfiguration.hpp:700
optional< uint64_t > guard_memcpy_function_pointer() const
Definition LoadConfiguration.hpp:488
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:179
std::vector< IMAGE_GUARD > guard_cf_flags_list() const
List of flags.
LoadConfiguration & hybrid_metadata_pointer(uint64_t value)
Definition LoadConfiguration.hpp:669
optional< uint32_t > dynamic_value_reloctable_offset() const
Offset of dynamic relocation table relative to the relocation table.
Definition LoadConfiguration.hpp:404
LoadConfiguration & se_handler_table(uint64_t se_handler_table)
Definition LoadConfiguration.hpp:598
LoadConfiguration & guard_cf_function_table(uint64_t guard_cf_function_table)
Definition LoadConfiguration.hpp:619
LoadConfiguration & reserved2(uint16_t value)
Definition LoadConfiguration.hpp:694
const std::vector< uint32_t > & seh_functions() const
Return the list of the function RVA in the SEH table (if any).
Definition LoadConfiguration.hpp:260
LoadConfiguration & enclave_configuration_ptr(uint64_t value)
Definition LoadConfiguration.hpp:715
LoadConfiguration & characteristics(uint32_t characteristics)
Definition LoadConfiguration.hpp:496
uint64_t process_affinity_mask() const
The process affinity mask. For more information, see GetProcessAffinityMask. This member is available...
Definition LoadConfiguration.hpp:209
optional< uint64_t > guard_cf_check_function_pointer() const
The VA where Control Flow Guard check-function pointer is stored.
Definition LoadConfiguration.hpp:265
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:255
LoadConfiguration & guard_flags(IMAGE_GUARD flags)
Definition LoadConfiguration.hpp:629
optional< uint64_t > enclave_configuration_ptr() const
Definition LoadConfiguration.hpp:432
LoadConfiguration & lock_prefix_table(uint64_t lock_prefix_table)
Definition LoadConfiguration.hpp:548
const_ref_iterator< const dynamic_relocations_t &, const DynamicRelocation * > it_const_dynamic_relocations_t
Definition LoadConfiguration.hpp:120
LoadConfiguration & dynamic_value_reloctable_offset(uint32_t value)
Definition LoadConfiguration.hpp:684
LoadConfiguration & global_flags_set(uint32_t global_flags_set)
Definition LoadConfiguration.hpp:525
LoadConfiguration & guard_memcpy_function_pointer(uint64_t value)
Definition LoadConfiguration.hpp:755
const EnclaveConfiguration * enclave_config() const
Definition LoadConfiguration.hpp:436
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:198
LoadConfiguration & code_integrity(CodeIntegrity CI)
Definition LoadConfiguration.hpp:639
CHPEMetadata * chpe_metadata()
Definition LoadConfiguration.hpp:389
optional< uint64_t > guard_xfg_check_function_pointer() const
Definition LoadConfiguration.hpp:472
LoadConfiguration & guard_rf_failure_routine(uint64_t value)
Definition LoadConfiguration.hpp:674
LoadConfiguration & reserved3(uint32_t value)
Definition LoadConfiguration.hpp:710
uint16_t minor_version() const
Minor version.
Definition LoadConfiguration.hpp:156
LoadConfiguration & guard_flags(uint32_t flags)
Definition LoadConfiguration.hpp:634
optional< uint64_t > guard_rf_failure_routine() const
VA of the failure routine.
Definition LoadConfiguration.hpp:394
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:276
it_const_guard_functions guard_address_taken_iat_entries() const
List of RVA pointed by guard_address_taken_iat_entry_table().
Definition LoadConfiguration.hpp:332
it_const_guard_functions guard_cf_functions() const
Iterator over the Control Flow Guard functions referenced by guard_cf_function_table().
Definition LoadConfiguration.hpp:287
it_guard_functions guard_long_jump_targets()
Definition LoadConfiguration.hpp:356
uint32_t timedatestamp() const
The date and time stamp value.
Definition LoadConfiguration.hpp:146
const CHPEMetadata * chpe_metadata() const
Compiled Hybrid Portable Executable (CHPE) metadata (if any).
Definition LoadConfiguration.hpp:385
uint32_t size() const
Size of the current structure.
Definition LoadConfiguration.hpp:141
uint16_t csd_version() const
The service pack version.
Definition LoadConfiguration.hpp:219
LoadConfiguration & guard_rf_failure_routine_function_pointer(uint64_t value)
Definition LoadConfiguration.hpp:679
uint64_t editlist() const
Reserved for use by the system.
Definition LoadConfiguration.hpp:238
uint32_t global_flags_set() const
The global flags that control system behavior. For more information, see Gflags.exe.
Definition LoadConfiguration.hpp:168
optional< uint16_t > dynamic_value_reloctable_section() const
The section index of the dynamic value relocation table.
Definition LoadConfiguration.hpp:409
it_const_dynamic_relocations_t dynamic_relocations() const
Definition LoadConfiguration.hpp:370
LoadConfiguration & virtual_memory_threshold(uint64_t virtual_memory_threshold)
Definition LoadConfiguration.hpp:558
uint64_t virtual_memory_threshold() const
The maximum block size that can be allocated from heap segments, in bytes.
Definition LoadConfiguration.hpp:203
LoadConfiguration(LoadConfiguration &&)
void accept(Visitor &visitor) const override
LoadConfiguration & size(uint32_t value)
Definition LoadConfiguration.hpp:501
LoadConfiguration & timedatestamp(uint32_t timedatestamp)
Definition LoadConfiguration.hpp:505
LoadConfiguration & csd_version(uint16_t csd_version)
Definition LoadConfiguration.hpp:573
LoadConfiguration & editlist(uint64_t editlist)
Definition LoadConfiguration.hpp:588
optional< uint32_t > hotpatch_table_offset() const
Offset to the hotpatch table.
Definition LoadConfiguration.hpp:424
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:185
it_const_guard_functions guard_long_jump_targets() const
List of RVA pointed by guard_address_taken_iat_entry_table().
Definition LoadConfiguration.hpp:352
const VolatileMetadata * volatile_metadata() const
Definition LoadConfiguration.hpp:448
optional< uint64_t > hybrid_metadata_pointer() const
Alias for chpe_metadata_pointer().
Definition LoadConfiguration.hpp:375
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:192
optional< uint16_t > reserved2() const
Must be zero.
Definition LoadConfiguration.hpp:414
LoadConfiguration & uma_function_pointers(uint64_t value)
Definition LoadConfiguration.hpp:760
optional< uint64_t > guard_xfg_table_dispatch_function_pointer() const
Definition LoadConfiguration.hpp:480
it_const_guard_functions guard_eh_continuation_functions() const
Definition LoadConfiguration.hpp:464
optional< uint64_t > guard_rf_failure_routine_function_pointer() const
VA of the failure routine fptr.
Definition LoadConfiguration.hpp:399
EnclaveConfiguration * enclave_config()
Definition LoadConfiguration.hpp:440
LoadConfiguration & dependent_load_flags(uint16_t flags)
Definition LoadConfiguration.hpp:583
LoadConfiguration & reserved1(uint16_t reserved1)
Definition LoadConfiguration.hpp:578
friend class Parser
Definition LoadConfiguration.hpp:49
LoadConfiguration & cast_guard_os_determined_failure_mode(uint64_t value)
Definition LoadConfiguration.hpp:750
uint32_t global_flags_clear() const
The global flags that control system behavior. For more information, see Gflags.exe.
Definition LoadConfiguration.hpp:162
LoadConfiguration & guard_address_taken_iat_entry_count(uint64_t value)
Definition LoadConfiguration.hpp:649
uint16_t major_version() const
Major version.
Definition LoadConfiguration.hpp:151
bool has(IMAGE_GUARD flag) const
Check if the given flag is present.
Definition LoadConfiguration.hpp:301
LoadConfiguration & guard_address_taken_iat_entry_table(uint64_t value)
Definition LoadConfiguration.hpp:644
LoadConfiguration & guard_xfg_table_dispatch_function_pointer(uint64_t value)
Definition LoadConfiguration.hpp:745
LoadConfiguration & process_affinity_mask(uint64_t process_affinity_mask)
Definition LoadConfiguration.hpp:563
LoadConfiguration & guard_xfg_check_function_pointer(uint64_t value)
Definition LoadConfiguration.hpp:735
LoadConfiguration & hotpatch_table_offset(uint32_t value)
Definition LoadConfiguration.hpp:705
LoadConfiguration & global_flags_clear(uint32_t global_flags_clear)
Definition LoadConfiguration.hpp:520
VolatileMetadata * volatile_metadata()
Definition LoadConfiguration.hpp:452
uint32_t process_heap_flags() const
The process heap flags. For more information, see HeapCreate.
Definition LoadConfiguration.hpp:214
uint16_t dependent_load_flags() const
Alias for reserved1().
Definition LoadConfiguration.hpp:233
LoadConfiguration & volatile_metadata_pointer(uint64_t value)
Definition LoadConfiguration.hpp:720
IMAGE_GUARD
Definition LoadConfiguration.hpp:51
optional< uint64_t > volatile_metadata_pointer() const
Definition LoadConfiguration.hpp:444
optional< uint64_t > cast_guard_os_determined_failure_mode() const
Definition LoadConfiguration.hpp:484
it_guard_functions guard_address_taken_iat_entries()
Definition LoadConfiguration.hpp:336
LoadConfiguration & guard_cf_dispatch_function_pointer(uint64_t dispatch_pointer)
Definition LoadConfiguration.hpp:614
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:327
const_ref_iterator< const guard_functions_t & > it_const_guard_functions
Definition LoadConfiguration.hpp:115
LoadConfiguration & se_handler_count(uint64_t se_handler_count)
Definition LoadConfiguration.hpp:603
LoadConfiguration & minor_version(uint16_t minor_version)
Definition LoadConfiguration.hpp:515
LoadConfiguration & process_heap_flags(uint32_t process_heap_flagsid)
Definition LoadConfiguration.hpp:568
friend std::ostream & operator<<(std::ostream &os, const LoadConfiguration &config)
Definition LoadConfiguration.hpp:771
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:249
const CodeIntegrity * code_integrity() const
Code integrity information.
Definition LoadConfiguration.hpp:312
optional< uint64_t > dynamic_value_reloc_table() const
VA pointing to a IMAGE_DYNAMIC_RELOCATION_TABLE.
Definition LoadConfiguration.hpp:361
LoadConfiguration & major_version(uint16_t major_version)
Definition LoadConfiguration.hpp:510
LoadConfiguration & guard_eh_continuation_table(uint64_t value)
Definition LoadConfiguration.hpp:725
LoadConfiguration & dynamic_value_reloc_table(uint64_t value)
Definition LoadConfiguration.hpp:664
it_guard_functions guard_cf_functions()
Definition LoadConfiguration.hpp:291
LoadConfiguration & critical_section_default_timeout(uint32_t critical_section_default_timeout)
Definition LoadConfiguration.hpp:531
optional< uint64_t > guard_rf_verify_stackpointer_function_pointer() const
VA of the Function verifying the stack pointer.
Definition LoadConfiguration.hpp:419
optional< uint64_t > guard_cf_dispatch_function_pointer() const
The VA where Control Flow Guard dispatch-function pointer is stored.
Definition LoadConfiguration.hpp:270
std::vector< std::unique_ptr< DynamicRelocation > > dynamic_relocations_t
Definition LoadConfiguration.hpp:117
uint16_t reserved1() const
See: dependent_load_flags().
Definition LoadConfiguration.hpp:224
optional< uint64_t > guard_eh_continuation_count() const
Definition LoadConfiguration.hpp:460
it_guard_functions guard_eh_continuation_functions()
Definition LoadConfiguration.hpp:468
optional< uint32_t > guard_flags() const
Control Flow Guard related flags.
Definition LoadConfiguration.hpp:296
LoadConfiguration(const LoadConfiguration &)
optional< uint32_t > reserved3() const
Definition LoadConfiguration.hpp:428
optional< uint64_t > guard_cf_function_count() const
The count of unique RVAs in the guard_cf_function_table() table.
Definition LoadConfiguration.hpp:281
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:347
Main interface to parse PE binaries. In particular, the static Parser::parse functions 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:212
Opaque structure that is used by LIEF to avoid writing result<void> f(...). Instead,...
Definition errors.hpp:114
Definition optional.hpp:23
Iterator which returns reference on container's values.
Definition iterators.hpp:45
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:286
Definition LoadConfiguration.hpp:108
uint32_t extra
Definition LoadConfiguration.hpp:110
uint32_t rva
Definition LoadConfiguration.hpp:109
#define LIEF_API
Definition visibility.h:43
#define LIEF_LOCAL
Definition visibility.h:44