X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/eed4f17489f121ce232ce88b6127b6d4288f867f..5d7cc6d52918fbf09b9af24f6165961cae52836f:/Trampoline.t.cpp diff --git a/Trampoline.t.cpp b/Trampoline.t.cpp index ad1f515..6a87b5d 100644 --- a/Trampoline.t.cpp +++ b/Trampoline.t.cpp @@ -46,6 +46,8 @@ template static _finline void dlset(Baton *baton, Type_ &function, const char *name, void *handle = RTLD_DEFAULT) { function = reinterpret_cast(baton->dlsym(handle, name)); + if (function == NULL) + baton->dlerror(); } void *Routine(void *arg) { @@ -54,14 +56,27 @@ void *Routine(void *arg) { void *(*dlopen)(const char *, int); dlset(baton, dlopen, "dlopen"); + if (baton->dlsym(RTLD_DEFAULT, "JSEvaluateScript") == NULL) + dlopen("/System/Library/Frameworks/JavaScriptCore.framework/JavaScriptCore", RTLD_GLOBAL | RTLD_LAZY); + + void *(*objc_getClass)(const char *); + dlset(baton, objc_getClass, "objc_getClass"); + + if (objc_getClass("WebUndefined") == NULL) + dlopen("/System/Library/Frameworks/WebKit.framework/WebKit", RTLD_GLOBAL | RTLD_LAZY); + void *handle(dlopen(baton->library, RTLD_LAZY | RTLD_LOCAL)); + if (handle == NULL) { + baton->dlerror(); + return NULL; + } void (*CYHandleServer)(pid_t); dlset(baton, CYHandleServer, "CYHandleServer", handle); CYHandleServer(baton->pid); - return arg; + return NULL; } static void $bzero(void *data, size_t size) {