16#ifndef LIEF_MACHO_CHAINED_PTR_ANALYSIS_H
17#define LIEF_MACHO_CHAINED_PTR_ANALYSIS_H
178 DYLD_CHAINED_PTR_ARM64E_REBASE,
179 DYLD_CHAINED_PTR_ARM64E_BIND,
180 DYLD_CHAINED_PTR_ARM64E_AUTH_REBASE,
181 DYLD_CHAINED_PTR_ARM64E_AUTH_BIND,
182 DYLD_CHAINED_PTR_64_REBASE,
183 DYLD_CHAINED_PTR_ARM64E_BIND24,
184 DYLD_CHAINED_PTR_ARM64E_AUTH_BIND24,
185 DYLD_CHAINED_PTR_64_BIND,
186 DYLD_CHAINED_PTR_64_KERNEL_CACHE_REBASE,
187 DYLD_CHAINED_PTR_32_REBASE,
188 DYLD_CHAINED_PTR_32_BIND,
189 DYLD_CHAINED_PTR_32_CACHE_REBASE,
190 DYLD_CHAINED_PTR_32_FIRMWARE_REBASE,
191 DYLD_CHAINED_PTR_ARM64E_SEGMENTED_REBASE,
192 DYLD_CHAINED_PTR_ARM64E_AUTH_SEGMENTED_REBASE,
197 return std::unique_ptr<ChainedPointerAnalysis>(
279 const dyld_chained_ptr_arm64e_auth_rebase_t
286 const dyld_chained_ptr_arm64e_auth_bind_t
305 const dyld_chained_ptr_arm64e_auth_bind24_t
318 const dyld_chained_ptr_64_kernel_cache_rebase_t
337 const dyld_chained_ptr_32_cache_rebase_t
344 const dyld_chained_ptr_32_firmware_rebase_t
351 const dyld_chained_ptr_arm64e_segmented_rebase_t
358 const dyld_chained_ptr_arm64e_auth_segmented_rebase_t
407 const std::function<
int(uint64_t,
const union_pointer_t& ptr)>& callback
Class that is used to a read stream of data from different sources.
Definition BinaryStream.hpp:33
PTR_TYPE
Definition ChainedPointerAnalysis.hpp:176
@ UNKNOWN
Definition ChainedPointerAnalysis.hpp:177
union_pointer_t get_as(DYLD_CHAINED_PTR_FORMAT fmt) const
ChainedPointerAnalysis(uint64_t value, size_t size)
Definition ChainedPointerAnalysis.hpp:247
const dyld_chained_ptr_arm64e_segmented_rebase_t dyld_chained_ptr_arm64e_segmented_rebase() const
Definition ChainedPointerAnalysis.hpp:352
const dyld_chained_ptr_32_bind_t dyld_chained_ptr_32_bind() const
Definition ChainedPointerAnalysis.hpp:331
const dyld_chained_ptr_64_bind_t dyld_chained_ptr_64_bind() const
Definition ChainedPointerAnalysis.hpp:312
const dyld_chained_ptr_64_rebase_t dyld_chained_ptr_64_rebase() const
Definition ChainedPointerAnalysis.hpp:293
size_t size() const
Definition ChainedPointerAnalysis.hpp:263
const dyld_chained_ptr_arm64e_rebase_t dyld_chained_ptr_arm64e_rebase() const
Definition ChainedPointerAnalysis.hpp:267
const dyld_chained_ptr_arm64e_auth_rebase_t dyld_chained_ptr_arm64e_auth_rebase() const
Definition ChainedPointerAnalysis.hpp:280
const dyld_chained_ptr_64_kernel_cache_rebase_t dyld_chained_ptr_64_kernel_cache_rebase() const
Definition ChainedPointerAnalysis.hpp:319
ChainedPointerAnalysis & operator=(const ChainedPointerAnalysis &)=default
const dyld_chained_ptr_arm64e_bind24_t dyld_chained_ptr_arm64e_bind24() const
Definition ChainedPointerAnalysis.hpp:299
const dyld_chained_ptr_32_rebase_t dyld_chained_ptr_32_rebase() const
Definition ChainedPointerAnalysis.hpp:325
static size_t stride(DYLD_CHAINED_PTR_FORMAT fmt)
Definition ChainedPointerAnalysis.hpp:202
const dyld_chained_ptr_arm64e_auth_segmented_rebase_t dyld_chained_ptr_arm64e_auth_segmented_rebase() const
Definition ChainedPointerAnalysis.hpp:359
const dyld_chained_ptr_32_firmware_rebase_t dyld_chained_ptr_32_firmware_rebase() const
Definition ChainedPointerAnalysis.hpp:345
const dyld_chained_ptr_arm64e_bind_t dyld_chained_ptr_arm64e_bind() const
Definition ChainedPointerAnalysis.hpp:273
const dyld_chained_ptr_arm64e_auth_bind_t dyld_chained_ptr_arm64e_auth_bind() const
Definition ChainedPointerAnalysis.hpp:287
ChainedPointerAnalysis(ChainedPointerAnalysis &&) noexcept=default
static std::unique_ptr< ChainedPointerAnalysis > from_value(uint64_t value, size_t size)
Definition ChainedPointerAnalysis.hpp:195
const dyld_chained_ptr_32_cache_rebase_t dyld_chained_ptr_32_cache_rebase() const
Definition ChainedPointerAnalysis.hpp:338
static size_t ptr_size(DYLD_CHAINED_PTR_FORMAT fmt)
Definition ChainedPointerAnalysis.hpp:225
ChainedPointerAnalysis(const ChainedPointerAnalysis &)=default
const dyld_chained_ptr_arm64e_auth_bind24_t dyld_chained_ptr_arm64e_auth_bind24() const
Definition ChainedPointerAnalysis.hpp:306
uint64_t value() const
Definition ChainedPointerAnalysis.hpp:259
static uint64_t walk_chain(BinaryStream &stream, DYLD_CHAINED_PTR_FORMAT format, const std::function< int(uint64_t, const union_pointer_t &ptr)> &callback)
Wrapper that contains an Object (T) or an error.
Definition errors.hpp:77
Namespace related to the LIEF's Mach-O module.
Definition Abstract/Header.hpp:36
@ UNKNOWN
Definition MachO/enums.hpp:24
DYLD_CHAINED_PTR_FORMAT
Definition DyldChainedFormat.hpp:29
@ PTR_32
Definition DyldChainedFormat.hpp:33
@ PTR_32_FIRMWARE
Definition DyldChainedFormat.hpp:35
@ PTR_ARM64E_SHARED_CACHE
Definition DyldChainedFormat.hpp:44
@ PTR_ARM64E_USERLAND24
Definition DyldChainedFormat.hpp:43
@ PTR_32_CACHE
Definition DyldChainedFormat.hpp:34
@ PTR_64_KERNEL_CACHE
Definition DyldChainedFormat.hpp:39
@ PTR_ARM64E_KERNEL
Definition DyldChainedFormat.hpp:38
@ PTR_ARM64E_FIRMWARE
Definition DyldChainedFormat.hpp:41
@ PTR_X86_64_KERNEL_CACHE
Definition DyldChainedFormat.hpp:42
@ NONE
Definition DyldChainedFormat.hpp:30
@ PTR_ARM64E
Definition DyldChainedFormat.hpp:31
@ PTR_64
Definition DyldChainedFormat.hpp:32
@ PTR_64_OFFSET
Definition DyldChainedFormat.hpp:36
@ PTR_ARM64E_SEGMENTED
Definition DyldChainedFormat.hpp:46
@ PTR_ARM64E_USERLAND
Definition DyldChainedFormat.hpp:40
LIEF namespace.
Definition Abstract/Binary.hpp:40
Definition ChainedPointerAnalysis.hpp:131
uint32_t next
Definition ChainedPointerAnalysis.hpp:132
uint32_t ordinal
Definition ChainedPointerAnalysis.hpp:132
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_32_bind_t &chain)
uint32_t addend
Definition ChainedPointerAnalysis.hpp:132
uint32_t bind
Definition ChainedPointerAnalysis.hpp:132
Definition ChainedPointerAnalysis.hpp:139
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_32_cache_rebase_t &chain)
uint32_t next
Definition ChainedPointerAnalysis.hpp:140
uint32_t target
Definition ChainedPointerAnalysis.hpp:140
Definition ChainedPointerAnalysis.hpp:148
uint32_t target
Definition ChainedPointerAnalysis.hpp:149
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_32_firmware_rebase_t &chain)
uint32_t next
Definition ChainedPointerAnalysis.hpp:149
Definition ChainedPointerAnalysis.hpp:123
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_32_rebase_t &chain)
uint32_t bind
Definition ChainedPointerAnalysis.hpp:124
uint32_t target
Definition ChainedPointerAnalysis.hpp:124
uint32_t next
Definition ChainedPointerAnalysis.hpp:124
Definition ChainedPointerAnalysis.hpp:105
uint64_t addend
Definition ChainedPointerAnalysis.hpp:106
uint64_t ordinal
Definition ChainedPointerAnalysis.hpp:106
uint64_t reserved
Definition ChainedPointerAnalysis.hpp:106
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_64_bind_t &chain)
uint64_t next
Definition ChainedPointerAnalysis.hpp:106
uint64_t bind
Definition ChainedPointerAnalysis.hpp:106
Definition ChainedPointerAnalysis.hpp:113
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_64_kernel_cache_rebase_t &chain)
uint64_t cache_level
Definition ChainedPointerAnalysis.hpp:114
uint64_t addr_div
Definition ChainedPointerAnalysis.hpp:114
uint64_t target
Definition ChainedPointerAnalysis.hpp:114
uint64_t diversity
Definition ChainedPointerAnalysis.hpp:114
uint64_t key
Definition ChainedPointerAnalysis.hpp:114
uint64_t next
Definition ChainedPointerAnalysis.hpp:115
uint64_t is_auth
Definition ChainedPointerAnalysis.hpp:115
Definition ChainedPointerAnalysis.hpp:74
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_64_rebase_t &chain)
uint64_t unpack_target() const
Definition ChainedPointerAnalysis.hpp:80
uint64_t reserved
Definition ChainedPointerAnalysis.hpp:75
uint64_t target
Definition ChainedPointerAnalysis.hpp:75
uint64_t high8
Definition ChainedPointerAnalysis.hpp:75
uint64_t next
Definition ChainedPointerAnalysis.hpp:75
uint64_t bind
Definition ChainedPointerAnalysis.hpp:75
Definition ChainedPointerAnalysis.hpp:95
uint64_t auth
Definition ChainedPointerAnalysis.hpp:97
uint64_t bind
Definition ChainedPointerAnalysis.hpp:97
uint64_t zero
Definition ChainedPointerAnalysis.hpp:96
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_arm64e_auth_bind24_t &chain)
uint64_t ordinal
Definition ChainedPointerAnalysis.hpp:96
uint64_t diversity
Definition ChainedPointerAnalysis.hpp:96
uint64_t addr_div
Definition ChainedPointerAnalysis.hpp:96
uint64_t key
Definition ChainedPointerAnalysis.hpp:96
uint64_t next
Definition ChainedPointerAnalysis.hpp:97
Definition ChainedPointerAnalysis.hpp:64
uint64_t key
Definition ChainedPointerAnalysis.hpp:65
uint64_t auth
Definition ChainedPointerAnalysis.hpp:66
uint64_t addr_div
Definition ChainedPointerAnalysis.hpp:65
uint64_t zero
Definition ChainedPointerAnalysis.hpp:65
uint64_t diversity
Definition ChainedPointerAnalysis.hpp:65
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_arm64e_auth_bind_t &chain)
uint64_t next
Definition ChainedPointerAnalysis.hpp:66
uint64_t ordinal
Definition ChainedPointerAnalysis.hpp:65
uint64_t bind
Definition ChainedPointerAnalysis.hpp:66
Definition ChainedPointerAnalysis.hpp:54
uint64_t diversity
Definition ChainedPointerAnalysis.hpp:55
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_arm64e_auth_rebase_t &chain)
uint64_t auth
Definition ChainedPointerAnalysis.hpp:56
uint64_t bind
Definition ChainedPointerAnalysis.hpp:56
uint64_t next
Definition ChainedPointerAnalysis.hpp:55
uint64_t key
Definition ChainedPointerAnalysis.hpp:55
uint64_t addr_div
Definition ChainedPointerAnalysis.hpp:55
uint64_t target
Definition ChainedPointerAnalysis.hpp:55
Definition ChainedPointerAnalysis.hpp:167
uint32_t target_seg_index
Definition ChainedPointerAnalysis.hpp:168
uint32_t target_seg_offset
Definition ChainedPointerAnalysis.hpp:168
uint32_t addr_div
Definition ChainedPointerAnalysis.hpp:169
uint32_t diversity
Definition ChainedPointerAnalysis.hpp:169
uint32_t auth
Definition ChainedPointerAnalysis.hpp:169
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_arm64e_auth_segmented_rebase_t &chain)
uint32_t key
Definition ChainedPointerAnalysis.hpp:169
uint32_t next
Definition ChainedPointerAnalysis.hpp:169
Definition ChainedPointerAnalysis.hpp:86
uint64_t auth
Definition ChainedPointerAnalysis.hpp:87
uint64_t next
Definition ChainedPointerAnalysis.hpp:87
uint64_t zero
Definition ChainedPointerAnalysis.hpp:87
uint64_t ordinal
Definition ChainedPointerAnalysis.hpp:87
uint64_t addend
Definition ChainedPointerAnalysis.hpp:87
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_arm64e_bind24_t &chain)
uint64_t bind
Definition ChainedPointerAnalysis.hpp:87
Definition ChainedPointerAnalysis.hpp:46
uint64_t bind
Definition ChainedPointerAnalysis.hpp:47
uint64_t ordinal
Definition ChainedPointerAnalysis.hpp:47
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_arm64e_bind_t &chain)
uint64_t next
Definition ChainedPointerAnalysis.hpp:47
uint64_t zero
Definition ChainedPointerAnalysis.hpp:47
uint64_t auth
Definition ChainedPointerAnalysis.hpp:47
uint64_t addend
Definition ChainedPointerAnalysis.hpp:47
Definition ChainedPointerAnalysis.hpp:33
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_arm64e_rebase_t &chain)
uint64_t next
Definition ChainedPointerAnalysis.hpp:34
uint64_t target
Definition ChainedPointerAnalysis.hpp:34
uint64_t bind
Definition ChainedPointerAnalysis.hpp:34
uint64_t auth
Definition ChainedPointerAnalysis.hpp:34
uint64_t unpack_target() const
Definition ChainedPointerAnalysis.hpp:40
uint64_t high8
Definition ChainedPointerAnalysis.hpp:34
Definition ChainedPointerAnalysis.hpp:157
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_arm64e_segmented_rebase_t &chain)
uint32_t target_seg_offset
Definition ChainedPointerAnalysis.hpp:158
uint32_t next
Definition ChainedPointerAnalysis.hpp:159
uint32_t target_seg_index
Definition ChainedPointerAnalysis.hpp:158
uint32_t padding
Definition ChainedPointerAnalysis.hpp:159
uint32_t auth
Definition ChainedPointerAnalysis.hpp:159
Definition ChainedPointerAnalysis.hpp:365
dyld_chained_ptr_arm64e_bind24_t arm64e_bind24
Definition ChainedPointerAnalysis.hpp:373
dyld_chained_ptr_64_bind_t ptr_64_bind
Definition ChainedPointerAnalysis.hpp:375
dyld_chained_ptr_32_bind_t ptr_32_bind
Definition ChainedPointerAnalysis.hpp:378
dyld_chained_ptr_32_firmware_rebase_t ptr_32_firmware_rebase
Definition ChainedPointerAnalysis.hpp:380
dyld_chained_ptr_arm64e_auth_rebase_t arm64e_auth_rebase
Definition ChainedPointerAnalysis.hpp:370
PTR_TYPE type
Definition ChainedPointerAnalysis.hpp:366
dyld_chained_ptr_arm64e_rebase_t arm64e_rebase
Definition ChainedPointerAnalysis.hpp:368
uint64_t raw
Definition ChainedPointerAnalysis.hpp:385
dyld_chained_ptr_arm64e_segmented_rebase_t ptr_arm64e_segmented_rebase
Definition ChainedPointerAnalysis.hpp:382
dyld_chained_ptr_arm64e_auth_bind_t arm64e_auth_bind
Definition ChainedPointerAnalysis.hpp:371
dyld_chained_ptr_arm64e_auth_bind24_t arm64e_auth_bind24
Definition ChainedPointerAnalysis.hpp:374
dyld_chained_ptr_64_kernel_cache_rebase_t ptr_64_kernel_cache_rebase
Definition ChainedPointerAnalysis.hpp:376
dyld_chained_ptr_arm64e_bind_t arm64e_bind
Definition ChainedPointerAnalysis.hpp:369
dyld_chained_ptr_arm64e_auth_segmented_rebase_t ptr_arm64e_auth_segmented_rebase
Definition ChainedPointerAnalysis.hpp:384
dyld_chained_ptr_32_rebase_t ptr_32_rebase
Definition ChainedPointerAnalysis.hpp:377
dyld_chained_ptr_64_rebase_t ptr_64_rebase
Definition ChainedPointerAnalysis.hpp:372
friend std::ostream & operator<<(std::ostream &os, const union_pointer_t &ptr)
bool is_bind() const
Definition ChainedPointerAnalysis.hpp:392
dyld_chained_ptr_32_cache_rebase_t ptr_32_cache_rebase
Definition ChainedPointerAnalysis.hpp:379
result< uint64_t > target() const
result< uint32_t > ordinal() const
#define LIEF_API
Definition visibility.h:43