From: Jay Freeman (saurik) Date: Sun, 2 May 2010 10:18:39 +0000 (+0000) Subject: Rearrange who pulls WebKit from where. X-Git-Tag: v0.9.432~44 X-Git-Url: https://git.saurik.com/cycript.git/commitdiff_plain/95a2c7e5cdea1b4f7609f5842eed516ecb0036b7?hp=80ba20535cde899ede99eb3c38e98be0fe4bcf9a Rearrange who pulls WebKit from where. --- diff --git a/Baton.hpp b/Baton.hpp index 8d8adf5..892d820 100644 --- a/Baton.hpp +++ b/Baton.hpp @@ -48,6 +48,7 @@ struct Baton { int (*pthread_join)(pthread_t, void **); void *(*dlopen)(const char *, int); + char *(*dlerror)(); void *(*dlsym)(void *, const char *); mach_port_t (*mach_thread_self)(); diff --git a/Darwin.mk b/Darwin.mk index 02e2d2a..1289855 100644 --- a/Darwin.mk +++ b/Darwin.mk @@ -3,9 +3,10 @@ link += -lobjc -framework CoreFoundation console += -framework Foundation library += -install_name /usr/lib/libcycript.$(dll) library += -framework Foundation -library += -framework JavaScriptCore +console += -framework JavaScriptCore # XXX: do I just need WebCore? -library += -framework WebKit +console += -framework WebKit +library += -undefined dynamic_lookup library += -liconv flags += -I/usr/include/ffi apr_config := /usr/bin/apr-1-config diff --git a/Mach/Inject.cpp b/Mach/Inject.cpp index 765a4ab..f5673c2 100644 --- a/Mach/Inject.cpp +++ b/Mach/Inject.cpp @@ -71,6 +71,7 @@ void InjectLibrary(pid_t pid) { baton->pthread_join = &pthread_join; baton->dlopen = &dlopen; + baton->dlerror = &dlerror; baton->dlsym = &dlsym; baton->mach_thread_self = &mach_thread_self; diff --git a/Trampoline.t.cpp b/Trampoline.t.cpp index ad1f515..d7853ca 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) { @@ -55,13 +57,17 @@ void *Routine(void *arg) { dlset(baton, dlopen, "dlopen"); 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) {