diff --git a/.gitignore b/.gitignore index 1ae5b42..f59babe 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,7 @@ *.swp out +.vscode +Makefile +*.log +config.status +mconfig.pyc \ No newline at end of file diff --git a/configure b/configure index 480d027..4efc47a 100755 --- a/configure +++ b/configure @@ -110,6 +110,7 @@ mconfig.build_and_link_c_objs( '(src)/lib/darwin/interpose.c', '(src)/lib/darwin/objc-asm.S', '(src)/lib/darwin/objc.c', + '(src)/lib/darwin/macho.c', '(src)/lib/darwin/read.c', '(src)/lib/darwin/substrate-compat.c', '(src)/lib/darwin/execmem.c', diff --git a/lib/darwin/find-syms.c b/lib/darwin/find-syms.c index 1666f1c..9e3f5c6 100644 --- a/lib/darwin/find-syms.c +++ b/lib/darwin/find-syms.c @@ -11,7 +11,7 @@ #include "substitute-internal.h" #include "dyld_cache_format.h" -extern const struct dyld_all_image_infos *_dyld_get_all_image_infos(); +extern struct dyld_all_image_infos * my_get_all_image_infos(); static pthread_once_t dyld_inspect_once = PTHREAD_ONCE_INIT; /* and its fruits: */ @@ -280,7 +280,7 @@ ok2: ; */ static void inspect_dyld() { - const struct dyld_all_image_infos *aii = _dyld_get_all_image_infos(); + const struct dyld_all_image_infos *aii = my_get_all_image_infos(); const void *dyld_hdr = aii->dyldImageLoadAddress; const char *names[2] = { "__ZNK16ImageLoaderMachO8getSlideEv", diff --git a/lib/darwin/inject.c b/lib/darwin/inject.c index 7e36e60..a756afa 100644 --- a/lib/darwin/inject.c +++ b/lib/darwin/inject.c @@ -13,7 +13,7 @@ #include #include -extern const struct dyld_all_image_infos *_dyld_get_all_image_infos(); +extern struct dyld_all_image_infos * my_get_all_image_infos(); #define DEFINE_STRUCTS @@ -104,7 +104,7 @@ static int find_foreign_images(mach_port_t task, * look up the symbols locally and don't have to do the rest of the * syscalls... not sure if this is any faster, but whatever. */ if (FIELD(version) >= 13) { - const struct dyld_all_image_infos *local_aii = _dyld_get_all_image_infos(); + const struct dyld_all_image_infos *local_aii = my_get_all_image_infos(); if (local_aii->version >= 13 && FIELD(sharedCacheSlide) == local_aii->sharedCacheSlide && !memcmp(FIELD(sharedCacheUUID), local_aii->sharedCacheUUID, 16)) { diff --git a/lib/darwin/macho.c b/lib/darwin/macho.c new file mode 100644 index 0000000..ca248fa --- /dev/null +++ b/lib/darwin/macho.c @@ -0,0 +1,20 @@ +#include +#include +#include + + +struct dyld_all_image_infos * my_get_all_image_infos() +{ + kern_return_t kr; + task_flavor_t flavor = TASK_DYLD_INFO; + task_dyld_info_data_t infoData; + mach_msg_type_number_t task_info_outCnt = TASK_DYLD_INFO_COUNT; + kr = task_info(mach_task_self(), flavor, (task_info_t) &infoData, &task_info_outCnt); + if (kr != KERN_SUCCESS) { + //KR_ERROR(kr); + return 0; + } + struct dyld_all_image_infos *allImageInfos = + (struct dyld_all_image_infos *) infoData.all_image_info_addr; + return allImageInfos; +} \ No newline at end of file diff --git a/lib/darwin/macho.h b/lib/darwin/macho.h new file mode 100644 index 0000000..e9ccc97 --- /dev/null +++ b/lib/darwin/macho.h @@ -0,0 +1,3 @@ +#include +#include +struct dyld_all_image_infos * my_get_all_image_infos(); \ No newline at end of file