dyldSyscallInterface.h [plain text]
#ifndef __DYLD_SYSCALL_HELPERS__
#define __DYLD_SYSCALL_HELPERS__
#include <sys/cdefs.h>
#include <dirent.h>
#if __has_include(<libamfi.h>)
#include <libamfi.h>
#else
__BEGIN_DECLS
extern int amfi_check_dyld_policy_self(uint64_t input_flags, uint64_t* output_flags);
__END_DECLS
#endif
#include <libkern/OSAtomic.h>
#include <libproc.h>
#include <mach/mach.h>
#include <mach/mach_time.h>
#include <mach-o/loader.h>
#include <pthread.h>
#include <stdlib.h>
#include <sys/fcntl.h>
#include <sys/ioctl.h>
#include <sys/kdebug_private.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>
#include <System/sys/reason.h>
#define DYLD_SYSCALL_VTABLE_ENTRY(x) __typeof__ (x) *x
#if __cplusplus
namespace dyld {
#endif
struct SyscallHelpers
{
uintptr_t version;
DYLD_SYSCALL_VTABLE_ENTRY(open);
DYLD_SYSCALL_VTABLE_ENTRY(close);
DYLD_SYSCALL_VTABLE_ENTRY(pread);
DYLD_SYSCALL_VTABLE_ENTRY(write);
DYLD_SYSCALL_VTABLE_ENTRY(mmap);
DYLD_SYSCALL_VTABLE_ENTRY(munmap);
DYLD_SYSCALL_VTABLE_ENTRY(madvise);
DYLD_SYSCALL_VTABLE_ENTRY(stat);
DYLD_SYSCALL_VTABLE_ENTRY(fcntl);
DYLD_SYSCALL_VTABLE_ENTRY(ioctl);
DYLD_SYSCALL_VTABLE_ENTRY(issetugid);
DYLD_SYSCALL_VTABLE_ENTRY(getcwd);
DYLD_SYSCALL_VTABLE_ENTRY(realpath);
DYLD_SYSCALL_VTABLE_ENTRY(vm_allocate);
DYLD_SYSCALL_VTABLE_ENTRY(vm_deallocate);
DYLD_SYSCALL_VTABLE_ENTRY(vm_protect);
void (*vlog)(const char* format, va_list list);
void (*vwarn)(const char* format, va_list list);
DYLD_SYSCALL_VTABLE_ENTRY(pthread_mutex_lock);
DYLD_SYSCALL_VTABLE_ENTRY(pthread_mutex_unlock);
DYLD_SYSCALL_VTABLE_ENTRY(mach_thread_self);
DYLD_SYSCALL_VTABLE_ENTRY(mach_port_deallocate);
DYLD_SYSCALL_VTABLE_ENTRY(task_self_trap);
DYLD_SYSCALL_VTABLE_ENTRY(mach_timebase_info);
#if OSATOMIC_USE_INLINED
bool (*OSAtomicCompareAndSwapPtrBarrier)(void* old, void* nw, void * volatile *value);
void (*OSMemoryBarrier)(void);
#else
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated"
DYLD_SYSCALL_VTABLE_ENTRY(OSAtomicCompareAndSwapPtrBarrier);
DYLD_SYSCALL_VTABLE_ENTRY(OSMemoryBarrier);
#pragma clang diagnostic pop
#endif
void* (*getProcessInfo)(void); int* (*errnoAddress)(void);
DYLD_SYSCALL_VTABLE_ENTRY(mach_absolute_time);
DYLD_SYSCALL_VTABLE_ENTRY(thread_switch);
DYLD_SYSCALL_VTABLE_ENTRY(opendir);
DYLD_SYSCALL_VTABLE_ENTRY(readdir_r);
DYLD_SYSCALL_VTABLE_ENTRY(closedir);
void (*coresymbolication_load_notifier)(void *connection, uint64_t load_timestamp, const char *image_path, const struct mach_header *mach_header);
void (*coresymbolication_unload_notifier)(void *connection, uint64_t unload_timestamp, const char *image_path, const struct mach_header *mach_header);
DYLD_SYSCALL_VTABLE_ENTRY(proc_regionfilename);
DYLD_SYSCALL_VTABLE_ENTRY(getpid);
DYLD_SYSCALL_VTABLE_ENTRY(mach_port_insert_right);
DYLD_SYSCALL_VTABLE_ENTRY(mach_port_allocate);
DYLD_SYSCALL_VTABLE_ENTRY(mach_msg);
DYLD_SYSCALL_VTABLE_ENTRY(abort_with_payload);
DYLD_SYSCALL_VTABLE_ENTRY(task_register_dyld_image_infos);
DYLD_SYSCALL_VTABLE_ENTRY(task_unregister_dyld_image_infos);
DYLD_SYSCALL_VTABLE_ENTRY(task_get_dyld_image_infos);
DYLD_SYSCALL_VTABLE_ENTRY(task_register_dyld_shared_cache_image_info);
DYLD_SYSCALL_VTABLE_ENTRY(task_register_dyld_set_dyld_state);
DYLD_SYSCALL_VTABLE_ENTRY(task_register_dyld_get_process_state);
DYLD_SYSCALL_VTABLE_ENTRY(task_info);
DYLD_SYSCALL_VTABLE_ENTRY(thread_info);
DYLD_SYSCALL_VTABLE_ENTRY(kdebug_is_enabled);
DYLD_SYSCALL_VTABLE_ENTRY(kdebug_trace);
DYLD_SYSCALL_VTABLE_ENTRY(kdebug_trace_string);
DYLD_SYSCALL_VTABLE_ENTRY(amfi_check_dyld_policy_self);
void (*notifyMonitoringDyldMain)(void);
void (*notifyMonitoringDyld)(bool unloading, unsigned imageCount, const struct mach_header* loadAddresses[], const char* imagePaths[]);
DYLD_SYSCALL_VTABLE_ENTRY(mach_msg_destroy);
DYLD_SYSCALL_VTABLE_ENTRY(mach_port_construct);
DYLD_SYSCALL_VTABLE_ENTRY(mach_port_destruct);
DYLD_SYSCALL_VTABLE_ENTRY(fstat);
DYLD_SYSCALL_VTABLE_ENTRY(vm_copy);
DYLD_SYSCALL_VTABLE_ENTRY(task_dyld_process_info_notify_get);
};
extern const struct SyscallHelpers* gSyscallHelpers;
#if __cplusplus
}
#endif
#endif