]> git.saurik.com Git - cycript.git/commitdiff
Smuggle errors in libcycript-any.dylib to client.
authorJay Freeman (saurik) <saurik@saurik.com>
Sun, 12 Jan 2014 17:02:02 +0000 (09:02 -0800)
committerJay Freeman (saurik) <saurik@saurik.com>
Sun, 12 Jan 2014 17:02:02 +0000 (09:02 -0800)
Handler.mm
Select.cpp
Trampoline.t.cpp

index 32981481b2aac0cafb1a3e46cb4ac0615289633a..e9a89035d7b2270d2b63214c07537ee7cc00ced9 100644 (file)
@@ -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 {
index f15ab0625ee611bc5cd8a547ba9948a489920e8d..fc49e7caa556250428fab54dc3b8105978ea7942 100644 (file)
@@ -29,7 +29,7 @@
 
 #include <mach-o/dyld.h>
 
-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<void *>(&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<void (*)(pid_t)>(symbol)(pid);
 }
index 1901ad8d77d0284ef0570db4b4498555e05ee66e..7c6b388bb491a23f36491a93d1ccfba4a0c54866 100644 (file)
@@ -196,14 +196,14 @@ void *Routine(void *arg) {
     void *(*$dlsym)(void *, const char *);
     cyset($dlsym, "_dlsym", dyld);
 
-    void (*CYHandleServer)(pid_t);
-    CYHandleServer = reinterpret_cast<void (*)(pid_t)>($dlsym(handle, "CYHandleServer"));
+    void (*CYHandleServer)(pid_t, char *, size_t);
+    CYHandleServer = reinterpret_cast<void (*)(pid_t, char *, size_t)>($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;
 }