enum chain_format_t {
CHAIN_FORMAT_NONE = 0,
CHAIN_FORMAT_ARM64E = 1,
CHAIN_FORMAT_PTR_64 = 2,
CHAIN_FORMAT_PTR_32 = 3,
CHAIN_FORMAT_PTR_32_CACHE = 4,
CHAIN_FORMAT_PTR_32_FIRMWARE = 5,
};
struct dyld_bind_info {
const char *segname;
const char *sectname;
uint64_t address;
int bind_type;
const char *bind_name;
uint64_t addend;
const char *dylibname;
const char *symbolname;
enum bool weak_import;
uint64_t pointer_value;
uint32_t pointer_format;
};
extern void get_dyld_bind_info(
const uint8_t *start,
const uint8_t *end,
const char **dylibs,
uint32_t ndylibs,
struct segment_command **segs,
uint32_t nsegs,
struct segment_command_64 **segs64,
uint32_t nsegs64,
enum bool swapped,
char *object_addr,
uint64_t object_size,
struct dyld_bind_info **dbi,
uint64_t *ndbi,
enum chain_format_t *chain_format,
enum bool print_errors);
extern void print_dyld_bind_info(
struct dyld_bind_info *dbi,
uint64_t ndbi);
extern void print_dyld_rebase_opcodes(
const uint8_t* object_addr,
uint64_t object_size,
uint32_t offset,
uint32_t size);
extern void print_dyld_bind_opcodes(
const uint8_t* object_addr,
uint64_t object_size,
const char* type,
uint32_t offset,
uint32_t size);
extern const char * get_dyld_bind_info_symbolname(
uint64_t address,
struct dyld_bind_info *dbi,
uint64_t ndbi,
enum chain_format_t chain_format,
int64_t *addend);
extern void get_dyld_chained_fixups(
const uint8_t *start,
const uint8_t *end,
const char **dylibs,
uint32_t ndylibs,
struct segment_command **segs,
uint32_t nsegs,
struct segment_command_64 **segs64,
uint32_t nsegs64,
enum bool swapped,
char *object_addr,
uint64_t object_size,
struct dyld_bind_info **dbi,
uint64_t *ndbi,
enum chain_format_t *chain_format,
enum bool print_errors);
extern uint64_t get_chained_rebase_value(
uint64_t chain_value,
enum chain_format_t chain_format,
enum bool *has_auth);