X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/604ed881a401017ff5e36d561f233eda277e1819..49c0d26358a08666c00b885839a1d104a808a953:/Select.cpp diff --git a/Select.cpp b/Select.cpp index 3143be2..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; @@ -37,10 +37,7 @@ extern "C" void CYHandleServer(pid_t pid) { const char *fname(addr.dli_fname); size_t length(strlen(fname)); - const char *ext(strrchr(fname, '.')); - size_t prefix(ext - fname); - - const char *addition; + const char *target; #ifdef __APPLE__ // XXX: THIS IS HORRIBLE OMG I NEED TO FIX THIS ASAP bool simulator(false); @@ -49,28 +46,29 @@ extern "C" void CYHandleServer(pid_t pid) { simulator = true; } if (simulator) - addition = "-sim"; + target = "sim"; else #endif // someone threw a fit about dangling #endif + else // the idea that this bothers someone gives me glee - addition = "-sys"; + target = "sys"; - char library[length + 5]; - memcpy(library, fname, prefix); - memcpy(library + prefix, addition, 4); - memcpy(library + prefix + 4, fname + prefix, length - prefix); - library[length + 4] = '\0'; + char library[length + 1]; + memcpy(library, fname, length); + memcpy(library + length - 6 - 3, target, 3); + library[length] = '\0'; 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); }