LoadConfiguration

This analyzer enhances the representation and underlying data of the PE LoadConfiguration structure within BinaryNinja.

140011b20  struct Load_Configuration_Directory_Table __load_configuration_directory_table =140011b20  {140011b20      uint32_t characteristics = 0x140140011b24      uint32_t timeDateStamp = 0x0140011b28      uint16_t majorVersion = 0x0140011b2a      uint16_t minorVersion = 0x0140011b2c      uint32_t globalFlagsClear = 0x0140011b30      uint32_t globalFlagsSet = 0x0140011b34      uint32_t criticalSectionDefaultTimeout = 0x0140011b38      uint64_t deCommitFreeBlockThreshold = 0x0140011b40      uint64_t deCommitTotalFreeThreshold = 0x0140011b48      uint64_t lockPrefixTable = 0x0140011b50      uint64_t maximumAllocationSize = 0x0140011b58      uint64_t virtualMemoryThreshold = 0x0140011b60      uint64_t processAffinityMask = 0x0140011b68      uint32_t processHeapFlags = 0x0140011b6c      uint16_t csdVersion = 0x0140011b6e      uint16_t reserved = 0x0140011b70      uint64_t editList = 0x0140011b78      uint64_t securityCookie = 0x140016040140011b80      uint64_t seHandlerTable = 0x0140011b88      uint64_t seHandlerCount = 0x0140011b90      uint64_t guardCFCheckFunctionPointer = 0x140011070140011b98      uint64_t guardCFDispatchFunctionPointer = 0x140011080140011ba0      uint64_t guardCFFunctionTable = 0x0140011ba8      uint64_t guardCFFunctionCount = 0x0140011bb0      uint32_t guardFlags = 0x100140011bb4      uint16_t Flags = 0x0140011bb6      uint16_t Catalog = 0x0140011bb8      uint32_t CatalogOffset = 0x0140011bbc      uint32_t Reserved = 0x0140011bc0      uint64_t guardAddressTakenIatEntryTable = 0x0140011bc8      uint64_t guardAddressTakenIatEntryCount = 0x0140011bd0      uint64_t guardLongJumpTargetTable = 0x0140011bd8      uint64_t guardLongJumpTargetCount = 0x0140011be0      uint64_t dynamicValueRelocTable = 0x0140011be8      uint64_t CHPEMetadataPointer = 0x1400111f8140011bf0      uint64_t guardRFFailureRoutine = 0x0140011bf8      uint64_t guardRFFailureRoutineFunctionPointer = 0x0140011c00      uint32_t dynamicValueRelocTableOffset = 0x0140011c04      uint16_t dynamicValueRelocTableSection = 0x0140011c06      uint16_t reserved2 = 0x0140011c08      uint64_t guardRFVerifyStackPointerFunctionPointer = 0x0140011c10      uint32_t hotPatchTableOffset = 0x0140011c14      uint32_t reserved3 = 0x0140011c18      uint64_t enclaveConfigurationPointer = 0x0140011c20      uint64_t volatileMetadataPointer = 0x0140011c28      uint64_t guardEHContinuationTable = 0x0140011c30      uint64_t guardEHContinuationCount = 0x0140011c38      uint64_t guardXFGCheckFunctionPointer = 0x140011078140011c40      uint64_t guardXFGDispatchFunctionPointer = 0x140011088140011c48      uint64_t guardXFGTableDispatchFunctionPointer = 0x140011090140011c50  }
140011b20  struct _LIEF_IMAGE_LOAD_CONFIG_DIRECTORY64 __load_configuration_directory_table =140011b20  {140011b20      uint32_t Size = 0x140140011b24      uint32_t TimeDateStamp = 0x0140011b28      uint16_t MajorVersion = 0x0140011b2a      uint16_t MinorVersion = 0x0140011b2c      uint32_t GlobalFlagsClear = 0x0140011b30      uint32_t GlobalFlagsSet = 0x0140011b34      uint32_t CriticalSectionDefaultTimeout = 0x0140011b38      uintptr_t DeCommitFreeBlockThreshold = 0x0140011b40      uintptr_t DeCommitTotalFreeThreshold = 0x0140011b48      void* LockPrefixTable = 0x0140011b50      uintptr_t MaximumAllocationSize = 0x0140011b58      uintptr_t VirtualMemoryThreshold = 0x0140011b60      uintptr_t ProcessHeapFlags = 0x0140011b68      uint32_t ProcessAffinityMask = 0x0140011b6c      uint16_t CSDVersion = 0x0140011b6e      uint16_t DependentLoadFlags = 0x0140011b70      void* EditList = 0x0140011b78      void* SecurityCookie = __security_cookie140011b80      uintptr_t* SEHandlerTable = 0x0140011b88      uintptr_t SEHandlerCount = 0x0140011b90      void (** GuardCFCheckFunctionPointer)() = __guard_check_icall_fptr140011b98      void (** GuardCFDispatchFunctionPointer)() = __guard_dispatch_icall_fptr140011ba0      uint32_t* SEHandlerTable = 0x0140011ba8      uintptr_t GuardCFFunctionCount = 0x0140011bb0      enum GuardFlags = IMAGE_GUARD_CF_INSTRUMENTED140011bb4      struct CodeIntegrity =140011bb4      {140011bb4          uint16_t Flags = 0x0140011bb6          uint16_t Catalog = 0x0140011bb8          uint32_t CatalogOffset = 0x0140011bbc          uint32_t Reserved = 0x0140011bc0      }140011bc0      void* GuardAddressTakenIatEntryTable = 0x0140011bc8      uintptr_t GuardAddressTakenIatEntryCount = 0x0140011bd0      void* GuardLongJumpTargetTable = 0x0140011bd8      uintptr_t GuardLongJumpTargetCount = 0x0140011be0      void* DynamicValueRelocTable = 0x0140011be8      struct _LIEF_IMAGE_ARM64EC_METADATA_V2* const CHPEMetadataPointer = __image_arm64ec_metadata140011bf0      void (** GuardRFFailureRoutine)() = 0x0140011bf8      void (** GuardRFFailureRoutineFunctionPointer)() = 0x0140011c00      uint32_t DynamicValueRelocTableOffset = 0x0140011c04      uint16_t DynamicValueRelocTableSection = 0x0140011c06      uint16_t Reserved2 = 0x0140011c08      void (** GuardRFVerifyStackPointerFunctionPointer)() = 0x0140011c10      uint32_t HotPatchTableOffset = 0x0140011c14      uint32_t Reserved3 = 0x0140011c18      void* EnclaveConfigurationPointer = 0x0140011c20      void* VolatileMetadataPointer = 0x0140011c28      void* GuardEHContinuationTable = 0x0140011c30      void* GuardEHContinuationCount = 0x0140011c38      void (** GuardXFGCheckFunctionPointer)() = data_140011078140011c40      void (** GuardXFGDispatchFunctionPointer)() = data_140011088140011c48      void (** GuardXFGTableDispatchFunctionPointer)() = data_140011090140011c50      void (** CastGuardOsDeterminedFailureMode)() = 0x140011098140011c58      void (** GuardMemcpyFunctionPointer)() = data_1400110a0140011c60  }
The layout of this structure – exposed in LIEF through the interface – evolves frequently across new Windows releases. By running this analyzer, you obtain a more complete and accurate representation of these attributes along with their correct data types.
Beyond the Load Configuration, the analyzer also defines additional structures, such as , which provide valuable context for analyzing ARM64EC binaries. These definitions make it easier to interpret the purpose of certain functions and pointers, leading to deeper insights during reverse engineering.
1400111e0  00 00 00 00 01 00 00 00 48 65 6c 6c 6f 20 57 6f 72 6c 64 21 0a 00 00 00 02 00 00 00 00 1e 01 00  ........Hello World!............140011200  02 00 00 00 b4 1c 01 00 00 90 01 00 00 10 01 00 08 10 01 00 18 10 01 00 10 10 01 00 20 10 01 00  ............................ ...140011220  00 00 00 00 00 50 01 00 01 00 00 00 01 00 00 00 28 10 01 00 30 10 01 00 00 70 01 00 38 0d 00 00  .....P..........(...0....p..8...140011240  38 10 01 00 48 3e 01 00 00 00 00 00 00 00 00 00 00 00 00 00 40 10 01 00 48 10 01 00 50 10 01 00  8...H>..............@...H...P...140011260  58 10 01 00 60 10 01 00 68 10 01 00 00 00 00 00                                                  X...`...h.......
1400111e8  char const data_1400111e8[0xe] = "Hello World!\n", 01400111f6                                                                    00 00                                                ..1400111f8  struct _LIEF_IMAGE_ARM64EC_METADATA_V2 __image_arm64ec_metadata =1400111f8  {1400111f8      uint32_t Version = 0x21400111fc      uint32_t CodeMap = 0x11e00140011200      uint32_t CodeMapCount = 0x2140011204      uint32_t CodeRangesToEntryPoints = 0x11cb4140011208      uint32_t RedirectionMetadata = 0x1900014001120c      uint32_t __os_arm64x_dispatch_call_no_redirect = 0x11000140011210      uint32_t __os_arm64x_dispatch_ret = 0x11008140011214      uint32_t __os_arm64x_dispatch_call = 0x11018140011218      uint32_t __os_arm64x_dispatch_icall = 0x1101014001121c      uint32_t __os_arm64x_dispatch_icall_cfg = 0x11020140011220      uint32_t AlternateEntryPoint = 0x0140011224      uint32_t AuxiliaryIAT = 0x15000140011228      uint32_t CodeRangesToEntryPointsCount = 0x114001122c      uint32_t RedirectionMetadataCount = 0x1140011230      uint32_t GetX64InformationFunctionPointer = 0x11028140011234      uint32_t SetX64InformationFunctionPointer = 0x11030140011238      uint32_t ExtraRFETable = 0x1700014001123c      uint32_t ExtraRFETableSize = 0xd38140011240      uint32_t __os_arm64x_dispatch_fptr = 0x11038140011244      uint32_t AuxiliaryIATCopy = 0x13e48140011248      uint32_t AuxDelayloadIAT = 0x014001124c      uint32_t AuxDelayloadIATCopy = 0x0140011250      uint32_t ReservedBitField = 0x0140011254  }