16#ifndef LIEF_MACHO_CHAINED_PTR_ANALYSIS_H
17#define LIEF_MACHO_CHAINED_PTR_ANALYSIS_H
268 DYLD_CHAINED_PTR_ARM64E_REBASE,
269 DYLD_CHAINED_PTR_ARM64E_BIND,
270 DYLD_CHAINED_PTR_ARM64E_AUTH_REBASE,
271 DYLD_CHAINED_PTR_ARM64E_AUTH_BIND,
272 DYLD_CHAINED_PTR_64_REBASE,
273 DYLD_CHAINED_PTR_ARM64E_BIND24,
274 DYLD_CHAINED_PTR_ARM64E_AUTH_BIND24,
275 DYLD_CHAINED_PTR_64_BIND,
276 DYLD_CHAINED_PTR_64_KERNEL_CACHE_REBASE,
277 DYLD_CHAINED_PTR_32_REBASE,
278 DYLD_CHAINED_PTR_32_BIND,
279 DYLD_CHAINED_PTR_32_CACHE_REBASE,
280 DYLD_CHAINED_PTR_32_FIRMWARE_REBASE,
281 DYLD_CHAINED_PTR_ARM64E_SEGMENTED_REBASE,
282 DYLD_CHAINED_PTR_ARM64E_AUTH_SEGMENTED_REBASE,
287 return std::unique_ptr<ChainedPointerAnalysis>(
369 const dyld_chained_ptr_arm64e_auth_rebase_t
376 const dyld_chained_ptr_arm64e_auth_bind_t
395 const dyld_chained_ptr_arm64e_auth_bind24_t
408 const dyld_chained_ptr_64_kernel_cache_rebase_t
427 const dyld_chained_ptr_32_cache_rebase_t
434 const dyld_chained_ptr_32_firmware_rebase_t
441 const dyld_chained_ptr_arm64e_segmented_rebase_t
448 const dyld_chained_ptr_arm64e_auth_segmented_rebase_t
497 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:35
PTR_TYPE
Definition ChainedPointerAnalysis.hpp:266
@ UNKNOWN
Definition ChainedPointerAnalysis.hpp:267
union_pointer_t get_as(DYLD_CHAINED_PTR_FORMAT fmt) const
ChainedPointerAnalysis(uint64_t value, size_t size)
Definition ChainedPointerAnalysis.hpp:337
const dyld_chained_ptr_arm64e_segmented_rebase_t dyld_chained_ptr_arm64e_segmented_rebase() const
Definition ChainedPointerAnalysis.hpp:442
const dyld_chained_ptr_32_bind_t dyld_chained_ptr_32_bind() const
Definition ChainedPointerAnalysis.hpp:421
const dyld_chained_ptr_64_bind_t dyld_chained_ptr_64_bind() const
Definition ChainedPointerAnalysis.hpp:402
const dyld_chained_ptr_64_rebase_t dyld_chained_ptr_64_rebase() const
Definition ChainedPointerAnalysis.hpp:383
size_t size() const
Definition ChainedPointerAnalysis.hpp:353
const dyld_chained_ptr_arm64e_rebase_t dyld_chained_ptr_arm64e_rebase() const
Definition ChainedPointerAnalysis.hpp:357
const dyld_chained_ptr_arm64e_auth_rebase_t dyld_chained_ptr_arm64e_auth_rebase() const
Definition ChainedPointerAnalysis.hpp:370
const dyld_chained_ptr_64_kernel_cache_rebase_t dyld_chained_ptr_64_kernel_cache_rebase() const
Definition ChainedPointerAnalysis.hpp:409
ChainedPointerAnalysis & operator=(const ChainedPointerAnalysis &)=default
const dyld_chained_ptr_arm64e_bind24_t dyld_chained_ptr_arm64e_bind24() const
Definition ChainedPointerAnalysis.hpp:389
const dyld_chained_ptr_32_rebase_t dyld_chained_ptr_32_rebase() const
Definition ChainedPointerAnalysis.hpp:415
static size_t stride(DYLD_CHAINED_PTR_FORMAT fmt)
Definition ChainedPointerAnalysis.hpp:292
const dyld_chained_ptr_arm64e_auth_segmented_rebase_t dyld_chained_ptr_arm64e_auth_segmented_rebase() const
Definition ChainedPointerAnalysis.hpp:449
const dyld_chained_ptr_32_firmware_rebase_t dyld_chained_ptr_32_firmware_rebase() const
Definition ChainedPointerAnalysis.hpp:435
const dyld_chained_ptr_arm64e_bind_t dyld_chained_ptr_arm64e_bind() const
Definition ChainedPointerAnalysis.hpp:363
const dyld_chained_ptr_arm64e_auth_bind_t dyld_chained_ptr_arm64e_auth_bind() const
Definition ChainedPointerAnalysis.hpp:377
ChainedPointerAnalysis(ChainedPointerAnalysis &&) noexcept=default
static std::unique_ptr< ChainedPointerAnalysis > from_value(uint64_t value, size_t size)
Definition ChainedPointerAnalysis.hpp:285
const dyld_chained_ptr_32_cache_rebase_t dyld_chained_ptr_32_cache_rebase() const
Definition ChainedPointerAnalysis.hpp:428
static size_t ptr_size(DYLD_CHAINED_PTR_FORMAT fmt)
Definition ChainedPointerAnalysis.hpp:315
ChainedPointerAnalysis(const ChainedPointerAnalysis &)=default
const dyld_chained_ptr_arm64e_auth_bind24_t dyld_chained_ptr_arm64e_auth_bind24() const
Definition ChainedPointerAnalysis.hpp:396
uint64_t value() const
Definition ChainedPointerAnalysis.hpp:349
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:79
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:34
@ PTR_32
Definition DyldChainedFormat.hpp:40
@ PTR_32_FIRMWARE
Definition DyldChainedFormat.hpp:42
@ PTR_ARM64E_SHARED_CACHE
Definition DyldChainedFormat.hpp:59
@ PTR_ARM64E_USERLAND24
Definition DyldChainedFormat.hpp:57
@ PTR_32_CACHE
Definition DyldChainedFormat.hpp:41
@ PTR_64_KERNEL_CACHE
Definition DyldChainedFormat.hpp:49
@ PTR_ARM64E_KERNEL
Definition DyldChainedFormat.hpp:48
@ PTR_ARM64E_FIRMWARE
Definition DyldChainedFormat.hpp:53
@ PTR_X86_64_KERNEL_CACHE
Definition DyldChainedFormat.hpp:55
@ NONE
Definition DyldChainedFormat.hpp:35
@ PTR_ARM64E
Definition DyldChainedFormat.hpp:37
@ PTR_64
Definition DyldChainedFormat.hpp:39
@ PTR_64_OFFSET
Definition DyldChainedFormat.hpp:44
@ PTR_ARM64E_SEGMENTED
Definition DyldChainedFormat.hpp:61
@ PTR_ARM64E_USERLAND
Definition DyldChainedFormat.hpp:51
LIEF namespace.
Definition Abstract/Binary.hpp:41
Definition ChainedPointerAnalysis.hpp:197
uint32_t next
Definition ChainedPointerAnalysis.hpp:201
uint32_t ordinal
Definition ChainedPointerAnalysis.hpp:199
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_32_bind_t &chain)
uint32_t addend
Definition ChainedPointerAnalysis.hpp:200
uint32_t bind
Definition ChainedPointerAnalysis.hpp:202
Definition ChainedPointerAnalysis.hpp:210
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_32_cache_rebase_t &chain)
uint32_t next
Definition ChainedPointerAnalysis.hpp:213
uint32_t target
Definition ChainedPointerAnalysis.hpp:212
Definition ChainedPointerAnalysis.hpp:222
uint32_t target
Definition ChainedPointerAnalysis.hpp:224
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_32_firmware_rebase_t &chain)
uint32_t next
Definition ChainedPointerAnalysis.hpp:225
Definition ChainedPointerAnalysis.hpp:185
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_32_rebase_t &chain)
uint32_t bind
Definition ChainedPointerAnalysis.hpp:189
uint32_t target
Definition ChainedPointerAnalysis.hpp:187
uint32_t next
Definition ChainedPointerAnalysis.hpp:188
Definition ChainedPointerAnalysis.hpp:154
uint64_t addend
Definition ChainedPointerAnalysis.hpp:157
uint64_t ordinal
Definition ChainedPointerAnalysis.hpp:156
uint64_t reserved
Definition ChainedPointerAnalysis.hpp:158
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_64_bind_t &chain)
uint64_t next
Definition ChainedPointerAnalysis.hpp:159
uint64_t bind
Definition ChainedPointerAnalysis.hpp:160
Definition ChainedPointerAnalysis.hpp:168
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_64_kernel_cache_rebase_t &chain)
uint64_t cache_level
Definition ChainedPointerAnalysis.hpp:171
uint64_t addr_div
Definition ChainedPointerAnalysis.hpp:173
uint64_t target
Definition ChainedPointerAnalysis.hpp:170
uint64_t diversity
Definition ChainedPointerAnalysis.hpp:172
uint64_t key
Definition ChainedPointerAnalysis.hpp:174
uint64_t next
Definition ChainedPointerAnalysis.hpp:175
uint64_t is_auth
Definition ChainedPointerAnalysis.hpp:176
Definition ChainedPointerAnalysis.hpp:102
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_64_rebase_t &chain)
uint64_t unpack_target() const
Definition ChainedPointerAnalysis.hpp:114
uint64_t reserved
Definition ChainedPointerAnalysis.hpp:106
uint64_t target
Definition ChainedPointerAnalysis.hpp:104
uint64_t high8
Definition ChainedPointerAnalysis.hpp:105
uint64_t next
Definition ChainedPointerAnalysis.hpp:107
uint64_t bind
Definition ChainedPointerAnalysis.hpp:108
Definition ChainedPointerAnalysis.hpp:136
uint64_t auth
Definition ChainedPointerAnalysis.hpp:145
uint64_t bind
Definition ChainedPointerAnalysis.hpp:144
uint64_t zero
Definition ChainedPointerAnalysis.hpp:139
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_arm64e_auth_bind24_t &chain)
uint64_t ordinal
Definition ChainedPointerAnalysis.hpp:138
uint64_t diversity
Definition ChainedPointerAnalysis.hpp:140
uint64_t addr_div
Definition ChainedPointerAnalysis.hpp:141
uint64_t key
Definition ChainedPointerAnalysis.hpp:142
uint64_t next
Definition ChainedPointerAnalysis.hpp:143
Definition ChainedPointerAnalysis.hpp:84
uint64_t key
Definition ChainedPointerAnalysis.hpp:90
uint64_t auth
Definition ChainedPointerAnalysis.hpp:93
uint64_t addr_div
Definition ChainedPointerAnalysis.hpp:89
uint64_t zero
Definition ChainedPointerAnalysis.hpp:87
uint64_t diversity
Definition ChainedPointerAnalysis.hpp:88
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_arm64e_auth_bind_t &chain)
uint64_t next
Definition ChainedPointerAnalysis.hpp:91
uint64_t ordinal
Definition ChainedPointerAnalysis.hpp:86
uint64_t bind
Definition ChainedPointerAnalysis.hpp:92
Definition ChainedPointerAnalysis.hpp:67
uint64_t diversity
Definition ChainedPointerAnalysis.hpp:70
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_arm64e_auth_rebase_t &chain)
uint64_t auth
Definition ChainedPointerAnalysis.hpp:75
uint64_t bind
Definition ChainedPointerAnalysis.hpp:74
uint64_t next
Definition ChainedPointerAnalysis.hpp:73
uint64_t key
Definition ChainedPointerAnalysis.hpp:72
uint64_t addr_div
Definition ChainedPointerAnalysis.hpp:71
uint64_t target
Definition ChainedPointerAnalysis.hpp:69
Definition ChainedPointerAnalysis.hpp:249
uint32_t target_seg_index
Definition ChainedPointerAnalysis.hpp:252
uint32_t target_seg_offset
Definition ChainedPointerAnalysis.hpp:251
uint32_t addr_div
Definition ChainedPointerAnalysis.hpp:254
uint32_t diversity
Definition ChainedPointerAnalysis.hpp:253
uint32_t auth
Definition ChainedPointerAnalysis.hpp:257
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_arm64e_auth_segmented_rebase_t &chain)
uint32_t key
Definition ChainedPointerAnalysis.hpp:255
uint32_t next
Definition ChainedPointerAnalysis.hpp:256
Definition ChainedPointerAnalysis.hpp:120
uint64_t auth
Definition ChainedPointerAnalysis.hpp:127
uint64_t next
Definition ChainedPointerAnalysis.hpp:125
uint64_t zero
Definition ChainedPointerAnalysis.hpp:123
uint64_t ordinal
Definition ChainedPointerAnalysis.hpp:122
uint64_t addend
Definition ChainedPointerAnalysis.hpp:124
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_arm64e_bind24_t &chain)
uint64_t bind
Definition ChainedPointerAnalysis.hpp:126
Definition ChainedPointerAnalysis.hpp:52
uint64_t bind
Definition ChainedPointerAnalysis.hpp:58
uint64_t ordinal
Definition ChainedPointerAnalysis.hpp:54
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_arm64e_bind_t &chain)
uint64_t next
Definition ChainedPointerAnalysis.hpp:57
uint64_t zero
Definition ChainedPointerAnalysis.hpp:55
uint64_t auth
Definition ChainedPointerAnalysis.hpp:59
uint64_t addend
Definition ChainedPointerAnalysis.hpp:56
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:37
uint64_t target
Definition ChainedPointerAnalysis.hpp:35
uint64_t bind
Definition ChainedPointerAnalysis.hpp:38
uint64_t auth
Definition ChainedPointerAnalysis.hpp:39
uint64_t unpack_target() const
Definition ChainedPointerAnalysis.hpp:46
uint64_t high8
Definition ChainedPointerAnalysis.hpp:36
Definition ChainedPointerAnalysis.hpp:234
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_arm64e_segmented_rebase_t &chain)
uint32_t target_seg_offset
Definition ChainedPointerAnalysis.hpp:236
uint32_t next
Definition ChainedPointerAnalysis.hpp:239
uint32_t target_seg_index
Definition ChainedPointerAnalysis.hpp:237
uint32_t padding
Definition ChainedPointerAnalysis.hpp:238
uint32_t auth
Definition ChainedPointerAnalysis.hpp:240
Definition ChainedPointerAnalysis.hpp:455
dyld_chained_ptr_arm64e_bind24_t arm64e_bind24
Definition ChainedPointerAnalysis.hpp:463
dyld_chained_ptr_64_bind_t ptr_64_bind
Definition ChainedPointerAnalysis.hpp:465
dyld_chained_ptr_32_bind_t ptr_32_bind
Definition ChainedPointerAnalysis.hpp:468
dyld_chained_ptr_32_firmware_rebase_t ptr_32_firmware_rebase
Definition ChainedPointerAnalysis.hpp:470
dyld_chained_ptr_arm64e_auth_rebase_t arm64e_auth_rebase
Definition ChainedPointerAnalysis.hpp:460
PTR_TYPE type
Definition ChainedPointerAnalysis.hpp:456
dyld_chained_ptr_arm64e_rebase_t arm64e_rebase
Definition ChainedPointerAnalysis.hpp:458
uint64_t raw
Definition ChainedPointerAnalysis.hpp:475
dyld_chained_ptr_arm64e_segmented_rebase_t ptr_arm64e_segmented_rebase
Definition ChainedPointerAnalysis.hpp:472
dyld_chained_ptr_arm64e_auth_bind_t arm64e_auth_bind
Definition ChainedPointerAnalysis.hpp:461
dyld_chained_ptr_arm64e_auth_bind24_t arm64e_auth_bind24
Definition ChainedPointerAnalysis.hpp:464
dyld_chained_ptr_64_kernel_cache_rebase_t ptr_64_kernel_cache_rebase
Definition ChainedPointerAnalysis.hpp:466
dyld_chained_ptr_arm64e_bind_t arm64e_bind
Definition ChainedPointerAnalysis.hpp:459
dyld_chained_ptr_arm64e_auth_segmented_rebase_t ptr_arm64e_auth_segmented_rebase
Definition ChainedPointerAnalysis.hpp:474
dyld_chained_ptr_32_rebase_t ptr_32_rebase
Definition ChainedPointerAnalysis.hpp:467
dyld_chained_ptr_64_rebase_t ptr_64_rebase
Definition ChainedPointerAnalysis.hpp:462
friend std::ostream & operator<<(std::ostream &os, const union_pointer_t &ptr)
bool is_bind() const
Definition ChainedPointerAnalysis.hpp:482
dyld_chained_ptr_32_cache_rebase_t ptr_32_cache_rebase
Definition ChainedPointerAnalysis.hpp:469
result< uint64_t > target() const
result< uint32_t > ordinal() const
#define LIEF_API
Definition visibility.h:45