GumScriptBackend * gum_script_backend_obtain_v8 (void) { static volatile gsize gonce_value; if (g_once_init_enter (&gonce_value)) { GumScriptBackend * backend = NULL; if (gum_query_is_rwx_supported ()) { backend = GUM_SCRIPT_BACKEND ( g_object_new (GUM_V8_TYPE_SCRIPT_BACKEND, NULL)); _gum_register_destructor (gum_script_backend_deinit_v8); } g_once_init_leave (&gonce_value, GPOINTER_TO_SIZE (backend) + 1); } return GUM_SCRIPT_BACKEND (GSIZE_TO_POINTER (gonce_value - 1)); }
GumScriptBackend * gum_script_backend_obtain_jsc (void) { static volatile gsize gonce_value; if (g_once_init_enter (&gonce_value)) { GumScriptBackend * backend = NULL; #ifdef HAVE_IOS backend = GUM_SCRIPT_BACKEND ( g_object_new (GUM_JSC_TYPE_SCRIPT_BACKEND, NULL)); #endif if (backend != NULL) _gum_register_destructor (gum_script_backend_deinit_jsc); g_once_init_leave (&gonce_value, GPOINTER_TO_SIZE (backend) + 1); } return GUM_SCRIPT_BACKEND (GSIZE_TO_POINTER (gonce_value - 1)); }
static mach_port_t gum_kernel_do_init (void) { #ifdef HAVE_IOS mach_port_t task = MACH_PORT_NULL; task_for_pid (mach_task_self (), 0, &task); if (task == MACH_PORT_NULL) { /* Untested, but should work on iOS 9.1 with Pangu jailbreak */ host_get_special_port (mach_host_self (), HOST_LOCAL_NODE, 4, &task); } if (task != MACH_PORT_NULL) _gum_register_destructor (gum_kernel_do_deinit); return task; #else (void) gum_kernel_do_deinit; return MACH_PORT_NULL; #endif }