16#ifndef LIEF_MACHO_CHAINED_PTR_ANALYSIS_H
17#define LIEF_MACHO_CHAINED_PTR_ANALYSIS_H
269 DYLD_CHAINED_PTR_ARM64E_REBASE,
270 DYLD_CHAINED_PTR_ARM64E_BIND,
271 DYLD_CHAINED_PTR_ARM64E_AUTH_REBASE,
272 DYLD_CHAINED_PTR_ARM64E_AUTH_BIND,
273 DYLD_CHAINED_PTR_64_REBASE,
274 DYLD_CHAINED_PTR_ARM64E_BIND24,
275 DYLD_CHAINED_PTR_ARM64E_AUTH_BIND24,
276 DYLD_CHAINED_PTR_64_BIND,
277 DYLD_CHAINED_PTR_64_KERNEL_CACHE_REBASE,
278 DYLD_CHAINED_PTR_32_REBASE,
279 DYLD_CHAINED_PTR_32_BIND,
280 DYLD_CHAINED_PTR_32_CACHE_REBASE,
281 DYLD_CHAINED_PTR_32_FIRMWARE_REBASE,
282 DYLD_CHAINED_PTR_ARM64E_SEGMENTED_REBASE,
283 DYLD_CHAINED_PTR_ARM64E_AUTH_SEGMENTED_REBASE,
288 return std::make_unique<ChainedPointerAnalysis>(
value,
size);
368 const dyld_chained_ptr_arm64e_auth_rebase_t
375 const dyld_chained_ptr_arm64e_auth_bind_t
394 const dyld_chained_ptr_arm64e_auth_bind24_t
407 const dyld_chained_ptr_64_kernel_cache_rebase_t
426 const dyld_chained_ptr_32_cache_rebase_t
433 const dyld_chained_ptr_32_firmware_rebase_t
440 const dyld_chained_ptr_arm64e_segmented_rebase_t
447 const dyld_chained_ptr_arm64e_auth_segmented_rebase_t
502 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:267
union_pointer_t get_as(DYLD_CHAINED_PTR_FORMAT fmt) const
ChainedPointerAnalysis(uint64_t value, size_t size)
Definition ChainedPointerAnalysis.hpp:336
const dyld_chained_ptr_arm64e_segmented_rebase_t dyld_chained_ptr_arm64e_segmented_rebase() const
Definition ChainedPointerAnalysis.hpp:441
const dyld_chained_ptr_32_bind_t dyld_chained_ptr_32_bind() const
Definition ChainedPointerAnalysis.hpp:420
const dyld_chained_ptr_64_bind_t dyld_chained_ptr_64_bind() const
Definition ChainedPointerAnalysis.hpp:401
const dyld_chained_ptr_64_rebase_t dyld_chained_ptr_64_rebase() const
Definition ChainedPointerAnalysis.hpp:382
size_t size() const
Definition ChainedPointerAnalysis.hpp:352
const dyld_chained_ptr_arm64e_rebase_t dyld_chained_ptr_arm64e_rebase() const
Definition ChainedPointerAnalysis.hpp:356
const dyld_chained_ptr_arm64e_auth_rebase_t dyld_chained_ptr_arm64e_auth_rebase() const
Definition ChainedPointerAnalysis.hpp:369
const dyld_chained_ptr_64_kernel_cache_rebase_t dyld_chained_ptr_64_kernel_cache_rebase() const
Definition ChainedPointerAnalysis.hpp:408
ChainedPointerAnalysis & operator=(const ChainedPointerAnalysis &)=default
const dyld_chained_ptr_arm64e_bind24_t dyld_chained_ptr_arm64e_bind24() const
Definition ChainedPointerAnalysis.hpp:388
const dyld_chained_ptr_32_rebase_t dyld_chained_ptr_32_rebase() const
Definition ChainedPointerAnalysis.hpp:414
static size_t stride(DYLD_CHAINED_PTR_FORMAT fmt)
Definition ChainedPointerAnalysis.hpp:291
const dyld_chained_ptr_arm64e_auth_segmented_rebase_t dyld_chained_ptr_arm64e_auth_segmented_rebase() const
Definition ChainedPointerAnalysis.hpp:448
const dyld_chained_ptr_32_firmware_rebase_t dyld_chained_ptr_32_firmware_rebase() const
Definition ChainedPointerAnalysis.hpp:434
const dyld_chained_ptr_arm64e_bind_t dyld_chained_ptr_arm64e_bind() const
Definition ChainedPointerAnalysis.hpp:362
const dyld_chained_ptr_arm64e_auth_bind_t dyld_chained_ptr_arm64e_auth_bind() const
Definition ChainedPointerAnalysis.hpp:376
ChainedPointerAnalysis(ChainedPointerAnalysis &&) noexcept=default
static std::unique_ptr< ChainedPointerAnalysis > from_value(uint64_t value, size_t size)
Definition ChainedPointerAnalysis.hpp:286
const dyld_chained_ptr_32_cache_rebase_t dyld_chained_ptr_32_cache_rebase() const
Definition ChainedPointerAnalysis.hpp:427
static size_t ptr_size(DYLD_CHAINED_PTR_FORMAT fmt)
Definition ChainedPointerAnalysis.hpp:314
ChainedPointerAnalysis(const ChainedPointerAnalysis &)=default
const dyld_chained_ptr_arm64e_auth_bind24_t dyld_chained_ptr_arm64e_auth_bind24() const
Definition ChainedPointerAnalysis.hpp:395
uint64_t value() const
Definition ChainedPointerAnalysis.hpp:348
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:25
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:198
uint32_t next
Definition ChainedPointerAnalysis.hpp:202
uint32_t ordinal
Definition ChainedPointerAnalysis.hpp:200
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_32_bind_t &chain)
uint32_t addend
Definition ChainedPointerAnalysis.hpp:201
uint32_t bind
Definition ChainedPointerAnalysis.hpp:203
Definition ChainedPointerAnalysis.hpp:211
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_32_cache_rebase_t &chain)
uint32_t next
Definition ChainedPointerAnalysis.hpp:214
uint32_t target
Definition ChainedPointerAnalysis.hpp:213
Definition ChainedPointerAnalysis.hpp:223
uint32_t target
Definition ChainedPointerAnalysis.hpp:225
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_32_firmware_rebase_t &chain)
uint32_t next
Definition ChainedPointerAnalysis.hpp:226
Definition ChainedPointerAnalysis.hpp:186
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_32_rebase_t &chain)
uint32_t bind
Definition ChainedPointerAnalysis.hpp:190
uint32_t target
Definition ChainedPointerAnalysis.hpp:188
uint32_t next
Definition ChainedPointerAnalysis.hpp:189
Definition ChainedPointerAnalysis.hpp:155
uint64_t addend
Definition ChainedPointerAnalysis.hpp:158
uint64_t ordinal
Definition ChainedPointerAnalysis.hpp:157
uint64_t reserved
Definition ChainedPointerAnalysis.hpp:159
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_64_bind_t &chain)
uint64_t next
Definition ChainedPointerAnalysis.hpp:160
uint64_t bind
Definition ChainedPointerAnalysis.hpp:161
Definition ChainedPointerAnalysis.hpp:169
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_64_kernel_cache_rebase_t &chain)
uint64_t cache_level
Definition ChainedPointerAnalysis.hpp:172
uint64_t addr_div
Definition ChainedPointerAnalysis.hpp:174
uint64_t target
Definition ChainedPointerAnalysis.hpp:171
uint64_t diversity
Definition ChainedPointerAnalysis.hpp:173
uint64_t key
Definition ChainedPointerAnalysis.hpp:175
uint64_t next
Definition ChainedPointerAnalysis.hpp:176
uint64_t is_auth
Definition ChainedPointerAnalysis.hpp:177
Definition ChainedPointerAnalysis.hpp:103
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_64_rebase_t &chain)
uint64_t unpack_target() const
Definition ChainedPointerAnalysis.hpp:115
uint64_t reserved
Definition ChainedPointerAnalysis.hpp:107
uint64_t target
Definition ChainedPointerAnalysis.hpp:105
uint64_t high8
Definition ChainedPointerAnalysis.hpp:106
uint64_t next
Definition ChainedPointerAnalysis.hpp:108
uint64_t bind
Definition ChainedPointerAnalysis.hpp:109
Definition ChainedPointerAnalysis.hpp:137
uint64_t auth
Definition ChainedPointerAnalysis.hpp:146
uint64_t bind
Definition ChainedPointerAnalysis.hpp:145
uint64_t zero
Definition ChainedPointerAnalysis.hpp:140
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_arm64e_auth_bind24_t &chain)
uint64_t ordinal
Definition ChainedPointerAnalysis.hpp:139
uint64_t diversity
Definition ChainedPointerAnalysis.hpp:141
uint64_t addr_div
Definition ChainedPointerAnalysis.hpp:142
uint64_t key
Definition ChainedPointerAnalysis.hpp:143
uint64_t next
Definition ChainedPointerAnalysis.hpp:144
Definition ChainedPointerAnalysis.hpp:85
uint64_t key
Definition ChainedPointerAnalysis.hpp:91
uint64_t auth
Definition ChainedPointerAnalysis.hpp:94
uint64_t addr_div
Definition ChainedPointerAnalysis.hpp:90
uint64_t zero
Definition ChainedPointerAnalysis.hpp:88
uint64_t diversity
Definition ChainedPointerAnalysis.hpp:89
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_arm64e_auth_bind_t &chain)
uint64_t next
Definition ChainedPointerAnalysis.hpp:92
uint64_t ordinal
Definition ChainedPointerAnalysis.hpp:87
uint64_t bind
Definition ChainedPointerAnalysis.hpp:93
Definition ChainedPointerAnalysis.hpp:68
uint64_t diversity
Definition ChainedPointerAnalysis.hpp:71
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_arm64e_auth_rebase_t &chain)
uint64_t auth
Definition ChainedPointerAnalysis.hpp:76
uint64_t bind
Definition ChainedPointerAnalysis.hpp:75
uint64_t next
Definition ChainedPointerAnalysis.hpp:74
uint64_t key
Definition ChainedPointerAnalysis.hpp:73
uint64_t addr_div
Definition ChainedPointerAnalysis.hpp:72
uint64_t target
Definition ChainedPointerAnalysis.hpp:70
Definition ChainedPointerAnalysis.hpp:250
uint32_t target_seg_index
Definition ChainedPointerAnalysis.hpp:253
uint32_t target_seg_offset
Definition ChainedPointerAnalysis.hpp:252
uint32_t addr_div
Definition ChainedPointerAnalysis.hpp:255
uint32_t diversity
Definition ChainedPointerAnalysis.hpp:254
uint32_t auth
Definition ChainedPointerAnalysis.hpp:258
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_arm64e_auth_segmented_rebase_t &chain)
uint32_t key
Definition ChainedPointerAnalysis.hpp:256
uint32_t next
Definition ChainedPointerAnalysis.hpp:257
Definition ChainedPointerAnalysis.hpp:121
uint64_t auth
Definition ChainedPointerAnalysis.hpp:128
uint64_t next
Definition ChainedPointerAnalysis.hpp:126
uint64_t zero
Definition ChainedPointerAnalysis.hpp:124
uint64_t ordinal
Definition ChainedPointerAnalysis.hpp:123
uint64_t addend
Definition ChainedPointerAnalysis.hpp:125
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_arm64e_bind24_t &chain)
uint64_t bind
Definition ChainedPointerAnalysis.hpp:127
Definition ChainedPointerAnalysis.hpp:53
uint64_t bind
Definition ChainedPointerAnalysis.hpp:59
uint64_t ordinal
Definition ChainedPointerAnalysis.hpp:55
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_arm64e_bind_t &chain)
uint64_t next
Definition ChainedPointerAnalysis.hpp:58
uint64_t zero
Definition ChainedPointerAnalysis.hpp:56
uint64_t auth
Definition ChainedPointerAnalysis.hpp:60
uint64_t addend
Definition ChainedPointerAnalysis.hpp:57
Definition ChainedPointerAnalysis.hpp:34
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_arm64e_rebase_t &chain)
uint64_t next
Definition ChainedPointerAnalysis.hpp:38
uint64_t target
Definition ChainedPointerAnalysis.hpp:36
uint64_t bind
Definition ChainedPointerAnalysis.hpp:39
uint64_t auth
Definition ChainedPointerAnalysis.hpp:40
uint64_t unpack_target() const
Definition ChainedPointerAnalysis.hpp:47
uint64_t high8
Definition ChainedPointerAnalysis.hpp:37
Definition ChainedPointerAnalysis.hpp:235
friend std::ostream & operator<<(std::ostream &os, const dyld_chained_ptr_arm64e_segmented_rebase_t &chain)
uint32_t target_seg_offset
Definition ChainedPointerAnalysis.hpp:237
uint32_t next
Definition ChainedPointerAnalysis.hpp:240
uint32_t target_seg_index
Definition ChainedPointerAnalysis.hpp:238
uint32_t padding
Definition ChainedPointerAnalysis.hpp:239
uint32_t auth
Definition ChainedPointerAnalysis.hpp:241
Definition ChainedPointerAnalysis.hpp:454
std::variant< std::monostate, dyld_chained_ptr_arm64e_rebase_t, dyld_chained_ptr_arm64e_bind_t, dyld_chained_ptr_arm64e_auth_rebase_t, dyld_chained_ptr_arm64e_auth_bind_t, dyld_chained_ptr_64_rebase_t, dyld_chained_ptr_arm64e_bind24_t, dyld_chained_ptr_arm64e_auth_bind24_t, dyld_chained_ptr_64_bind_t, dyld_chained_ptr_64_kernel_cache_rebase_t, dyld_chained_ptr_32_rebase_t, dyld_chained_ptr_32_bind_t, dyld_chained_ptr_32_cache_rebase_t, dyld_chained_ptr_32_firmware_rebase_t, dyld_chained_ptr_arm64e_segmented_rebase_t, dyld_chained_ptr_arm64e_auth_segmented_rebase_t > content_t
Definition ChainedPointerAnalysis.hpp:455
PTR_TYPE type() const
The kind of chained pointer derived from the active alternative.
Definition ChainedPointerAnalysis.hpp:480
uint64_t raw
Definition ChainedPointerAnalysis.hpp:477
friend std::ostream & operator<<(std::ostream &os, const union_pointer_t &ptr)
bool is_bind() const
Definition ChainedPointerAnalysis.hpp:489
result< uint64_t > target() const
result< uint32_t > ordinal() const
content_t content
Definition ChainedPointerAnalysis.hpp:476
#define LIEF_API
Definition visibility.h:45