Esempio n. 1
0
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));
}
Esempio n. 2
0
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));
}
Esempio n. 3
0
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
}