static void test_interceptor_fixture_setup (TestInterceptorFixture * fixture, gconstpointer data) { (void) data; fixture->interceptor = gum_interceptor_obtain (); fixture->result = g_string_new (""); memset (&fixture->listener_context, 0, sizeof (fixture->listener_context)); if (target_function == NULL) { #ifdef G_OS_WIN32 target_function = gum_test_target_function; special_function = gum_test_target_function; target_nop_function_a = gum_test_target_nop_function_a; target_nop_function_b = gum_test_target_nop_function_b; target_nop_function_c = gum_test_target_nop_function_c; #else gchar * testdir, * filename; void * lib; testdir = test_util_get_data_dir (); filename = g_build_filename (testdir, "targetfunctions-" GUM_TEST_SHLIB_OS "-" GUM_TEST_SHLIB_ARCH "." G_MODULE_SUFFIX, NULL); lib = dlopen (filename, RTLD_NOW | RTLD_GLOBAL); if (lib == NULL) g_print ("failed to open '%s'\n", filename); g_assert (lib != NULL); g_free (filename); target_function = dlsym (lib, "gum_test_target_function"); g_assert (target_function != NULL); target_nop_function_a = dlsym (lib, "gum_test_target_nop_function_a"); g_assert (target_nop_function_a != NULL); target_nop_function_b = dlsym (lib, "gum_test_target_nop_function_b"); g_assert (target_nop_function_b != NULL); target_nop_function_c = dlsym (lib, "gum_test_target_nop_function_c"); g_assert (target_nop_function_c != NULL); filename = g_build_filename (testdir, "specialfunctions-" GUM_TEST_SHLIB_OS "-" GUM_TEST_SHLIB_ARCH "." G_MODULE_SUFFIX, NULL); lib = dlopen (filename, RTLD_LAZY | RTLD_GLOBAL); g_assert (lib != NULL); g_free (filename); special_function = dlsym (lib, "gum_test_special_function"); g_assert (special_function != NULL); g_free (testdir); #endif } }
static void test_interceptor_fixture_setup (TestInterceptorFixture * fixture, gconstpointer data) { (void) data; fixture->interceptor = gum_interceptor_obtain (); fixture->result = g_string_sized_new (4096); memset (&fixture->listener_context, 0, sizeof (fixture->listener_context)); }
static void test_sanity_checker_fixture_setup (TestSanityCheckerFixture * fixture, gconstpointer data) { fixture->output = g_string_new (""); fixture->interceptor = gum_interceptor_obtain (); gum_interceptor_ignore_other_threads (fixture->interceptor); fixture->checker = gum_sanity_checker_new_with_heap_apis ( test_util_heap_apis (), test_sanity_checker_fixture_do_output, fixture); }
static void gum_jsc_script_backend_init (GumJscScriptBackend * self) { GumJscScriptBackendPrivate * priv; priv = self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GUM_JSC_TYPE_SCRIPT_BACKEND, GumJscScriptBackendPrivate); priv->scheduler = NULL; priv->ignored_threads = g_hash_table_new_full (NULL, NULL, NULL, NULL); priv->interceptor = gum_interceptor_obtain (); }
static void gum_allocator_probe_init (GumAllocatorProbe * self) { GumAllocatorProbePrivate * priv; self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GUM_TYPE_ALLOCATOR_PROBE, GumAllocatorProbePrivate); priv = self->priv; priv->interceptor = gum_interceptor_obtain (); priv->function_contexts = g_ptr_array_sized_new (3); priv->enable_counters = DEFAULT_ENABLE_COUNTERS; }
void gum_init_embedded (void) { ffi_mem_callbacks ffi_callbacks = { (void * (*) (size_t)) gum_malloc, (void * (*) (size_t, size_t)) gum_calloc, gum_free, gum_on_ffi_allocate, gum_on_ffi_deallocate }; GThreadCallbacks thread_callbacks = { gum_on_thread_init, gum_on_thread_realize, gum_on_thread_dispose, gum_on_thread_finalize }; GFDCallbacks fd_callbacks = { gum_on_fd_opened, gum_on_fd_closed }; #if !DEBUG_HEAP_LEAKS && !defined (HAVE_ASAN) GMemVTable mem_vtable = { gum_malloc, gum_realloc, gum_free, gum_calloc, gum_malloc, gum_realloc }; #endif #if defined (G_OS_WIN32) && DEBUG_HEAP_LEAKS int tmp_flag; #endif if (gum_initialized) return; gum_initialized = TRUE; #if defined (G_OS_WIN32) && DEBUG_HEAP_LEAKS /*_CrtSetBreakAlloc (1337);*/ _CrtSetReportMode (_CRT_ERROR, _CRTDBG_MODE_FILE); _CrtSetReportFile (_CRT_ERROR, _CRTDBG_FILE_STDERR); tmp_flag = _CrtSetDbgFlag (_CRTDBG_REPORT_FLAG); tmp_flag |= _CRTDBG_ALLOC_MEM_DF; tmp_flag |= _CRTDBG_LEAK_CHECK_DF; tmp_flag &= ~_CRTDBG_CHECK_CRT_DF; _CrtSetDbgFlag (tmp_flag); #endif gum_memory_init (); ffi_set_mem_callbacks (&ffi_callbacks); g_thread_set_callbacks (&thread_callbacks); g_platform_audit_set_fd_callbacks (&fd_callbacks); #if !DEBUG_HEAP_LEAKS && !defined (HAVE_ASAN) if (RUNNING_ON_VALGRIND) { g_setenv ("G_SLICE", "always-malloc", TRUE); } else { g_mem_set_vtable (&mem_vtable); } #else g_setenv ("G_SLICE", "always-malloc", TRUE); #endif glib_init (); g_assertion_set_handler (gum_on_assert_failure, NULL); g_log_set_default_handler (gum_on_log_message, NULL); gum_do_init (); g_set_prgname ("frida"); #if defined (HAVE_LINUX) && defined (HAVE_GLIBC) gum_libdl_prevent_unload (); #endif gum_cached_interceptor = gum_interceptor_obtain (); }
void _gum_duk_interceptor_init (GumDukInterceptor * self, GumDukCore * core) { duk_context * ctx = core->ctx; self->core = core; self->interceptor = gum_interceptor_obtain (); self->invocation_listeners = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify) gum_duk_invocation_listener_destroy); self->replacement_by_address = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify) gum_duk_replace_entry_free); _gum_duk_store_module_data (ctx, "interceptor", self); duk_push_c_function (ctx, gumjs_interceptor_construct, 0); duk_push_object (ctx); duk_put_function_list (ctx, -1, gumjs_interceptor_functions); duk_put_prop_string (ctx, -2, "prototype"); duk_new (ctx, 0); duk_put_global_string (ctx, "Interceptor"); duk_push_c_function (ctx, gumjs_invocation_listener_construct, 2); duk_push_object (ctx); duk_put_function_list (ctx, -1, gumjs_invocation_listener_functions); duk_put_prop_string (ctx, -2, "prototype"); self->invocation_listener = _gum_duk_require_heapptr (ctx, -1); duk_put_global_string (ctx, "InvocationListener"); duk_push_c_function (ctx, gumjs_invocation_context_construct, 0); duk_push_object (ctx); duk_push_c_function (ctx, gumjs_invocation_context_finalize, 1); duk_set_finalizer (ctx, -2); duk_put_prop_string (ctx, -2, "prototype"); self->invocation_context = _gum_duk_require_heapptr (ctx, -1); duk_put_global_string (ctx, "InvocationContext"); _gum_duk_add_properties_to_class (ctx, "InvocationContext", gumjs_invocation_context_values); duk_push_c_function (ctx, gumjs_invocation_args_construct, 0); duk_push_object (ctx); duk_push_c_function (ctx, gumjs_invocation_args_finalize, 1); duk_set_finalizer (ctx, -2); duk_put_prop_string (ctx, -2, "prototype"); self->invocation_args = _gum_duk_require_heapptr (ctx, -1); duk_put_global_string (ctx, "InvocationArgs"); _gum_duk_create_subclass (ctx, "NativePointer", "InvocationReturnValue", gumjs_invocation_return_value_construct, 1, NULL); duk_get_global_string (ctx, "InvocationReturnValue"); duk_get_prop_string (ctx, -1, "prototype"); duk_push_c_function (ctx, gumjs_invocation_return_value_finalize, 1); duk_set_finalizer (ctx, -2); duk_put_function_list (ctx, -1, gumjs_invocation_return_value_functions); duk_pop (ctx); self->invocation_retval = _gum_duk_require_heapptr (ctx, -1); duk_pop (ctx); self->cached_invocation_context = gum_duk_invocation_context_new (self); self->cached_invocation_context_in_use = FALSE; self->cached_invocation_args = gum_duk_invocation_args_new (self); self->cached_invocation_args_in_use = FALSE; self->cached_invocation_return_value = gum_duk_invocation_return_value_new ( self); self->cached_invocation_return_value_in_use = FALSE; }