X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/3615a2f7f3a1a066c6c7e3ef66724a9398c238c2..b120443db34edddcdb016b2f9218355b2dd8ced6:/Mach/Inject.cpp?ds=sidebyside diff --git a/Mach/Inject.cpp b/Mach/Inject.cpp index 50ad0f8..7d80599 100644 --- a/Mach/Inject.cpp +++ b/Mach/Inject.cpp @@ -20,7 +20,7 @@ /* }}} */ #include "TargetConditionals.h" -#ifdef TARGET_OS_IPHONE +#if TARGET_OS_IPHONE #undef __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ #define __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ __IPHONE_5_0 #endif @@ -57,7 +57,7 @@ void InjectLibrary(pid_t pid) { memcpy(library, addr.dli_fname, flength); library[flength] = '\0'; _assert(strcmp(library + flength - 6, ".dylib") == 0); -#ifndef TARGET_OS_IPHONE +#if !TARGET_OS_IPHONE strcpy(library + flength - 6, "-any.dylib"); #endif @@ -207,6 +207,7 @@ void InjectLibrary(pid_t pid) { baton->dyld = info.all_image_info_addr; baton->pid = getpid(); + memset(baton->error, 0, sizeof(baton->error)); memcpy(baton->library, library, length); mach_vm_size_t size(depth + Stack_); @@ -288,6 +289,15 @@ void InjectLibrary(pid_t pid) { _krncall(mach_port_deallocate(self, thread)); + mach_vm_size_t error(sizeof(baton->error)); + _krncall(mach_vm_read_overwrite(task, data + offsetof(Baton, error), sizeof(baton->error), reinterpret_cast(&baton->error), &error)); + _assert(error == sizeof(baton->error)); + + if (baton->error[0] != '\0') { + baton->error[sizeof(baton->error) - 1] = '\0'; + CYThrow("%s", baton->error); + } + _krncall(mach_vm_deallocate(task, code, trampoline->size_)); _krncall(mach_vm_deallocate(task, stack, size));