From: Jay Freeman (saurik) Date: Sun, 12 Jan 2014 17:02:02 +0000 (-0800) Subject: Smuggle errors in libcycript-any.dylib to client. X-Git-Tag: v0.9.500~57 X-Git-Url: https://git.saurik.com/cycript.git/commitdiff_plain/8e8e69a786d9987f27f0c697aabb2f4c125b44e6?ds=inline Smuggle errors in libcycript-any.dylib to client. --- diff --git a/Handler.mm b/Handler.mm index 3298148..e9a8903 100644 --- a/Handler.mm +++ b/Handler.mm @@ -140,7 +140,7 @@ extern "C" void CYHandleClient(int socket) { _assert(pthread_create(&client->thread_, NULL, &OnClient, client) == 0); } -extern "C" void CYHandleServer(pid_t pid) { +extern "C" void CYHandleServer(pid_t pid, char *data, size_t size) { CYInitializeDynamic(); int socket(_syscall(::socket(PF_UNIX, SOCK_STREAM, 0))); try { diff --git a/Select.cpp b/Select.cpp index f15ab06..fc49e7c 100644 --- a/Select.cpp +++ b/Select.cpp @@ -29,7 +29,7 @@ #include -extern "C" void CYHandleServer(pid_t pid) { +extern "C" void CYHandleServer(pid_t pid, char *data, size_t size) { Dl_info addr; if (dladdr(reinterpret_cast(&CYHandleServer), &addr) == 0) return; @@ -60,13 +60,15 @@ extern "C" void CYHandleServer(pid_t pid) { void *handle(dlopen(library, RTLD_LOCAL | RTLD_LAZY)); if (handle == NULL) { - syslog(LOG_ERR, "dlopen() -> %s", dlerror()); + strlcpy(data, dlerror(), size); return; } void *symbol(dlsym(handle, "CYHandleServer")); - if (symbol == NULL) + if (symbol == NULL) { + strlcpy(data, dlerror(), size); return; + } reinterpret_cast(symbol)(pid); } diff --git a/Trampoline.t.cpp b/Trampoline.t.cpp index 1901ad8..7c6b388 100644 --- a/Trampoline.t.cpp +++ b/Trampoline.t.cpp @@ -196,14 +196,14 @@ void *Routine(void *arg) { void *(*$dlsym)(void *, const char *); cyset($dlsym, "_dlsym", dyld); - void (*CYHandleServer)(pid_t); - CYHandleServer = reinterpret_cast($dlsym(handle, "CYHandleServer")); + void (*CYHandleServer)(pid_t, char *, size_t); + CYHandleServer = reinterpret_cast($dlsym(handle, "CYHandleServer")); if (CYHandleServer == NULL) { $strlcpy(baton->error, $dlerror(), sizeof(baton->error)); return NULL; } - CYHandleServer(baton->pid); + CYHandleServer(baton->pid, baton->error, sizeof(baton->error)); return NULL; }