static gpointer do_init (gpointer data) { cs_opt_mem gum_cs_mem_callbacks = { gum_capstone_malloc, gum_capstone_calloc, gum_capstone_realloc, gum_capstone_free, gum_vsnprintf }; gum_memory_init (); #if GLIB_CHECK_VERSION (2, 46, 0) glib_init (); gio_init (); #endif cs_option (0, CS_OPT_MEM, GPOINTER_TO_SIZE (&gum_cs_mem_callbacks)); _gum_tls_init (); _gum_interceptor_init (); _gum_tls_realize (); return NULL; }
static gpointer do_init (gpointer data) { GumFeatureFlags features = (GumFeatureFlags) GPOINTER_TO_INT (data); cs_opt_mem gum_cs_mem_callbacks = { gum_capstone_malloc, gum_capstone_calloc, gum_capstone_realloc, gum_capstone_free, gum_vsnprintf }; (void) features; page_size = gum_query_page_size (); gum_memory_init (); #if GLIB_CHECK_VERSION (2, 42, 0) glib_init (); gio_init (); #endif cs_option (0, CS_OPT_MEM, GPOINTER_TO_SIZE (&gum_cs_mem_callbacks)); #ifdef HAVE_SYMBOL_BACKEND if ((features & GUM_FEATURE_SYMBOL_LOOKUP) != 0) _gum_symbol_util_init (); #endif _gum_interceptor_init (); return NULL; }
void frida_agent_environment_init (void) { GMemVTable mem_vtable = { gum_malloc, gum_realloc, gum_free, gum_calloc, gum_malloc, gum_realloc }; #if defined (G_OS_WIN32) && DEBUG_HEAP_LEAKS int tmp_flag; /*_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 (); g_mem_set_vtable (&mem_vtable); #if DEBUG_HEAP_LEAKS g_setenv ("G_SLICE", "always-malloc", TRUE); #endif glib_init (); g_log_set_default_handler (frida_agent_on_log_message, NULL); g_log_set_always_fatal (G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING); gio_init (); gum_init (); }
static void gum_do_init (void) { cs_opt_mem gum_cs_mem_callbacks = { gum_cs_malloc, gum_cs_calloc, gum_cs_realloc, gum_cs_free, (cs_vsnprintf_t) gum_vsnprintf }; gum_memory_init (); glib_init (); gobject_init (); gio_init (); cs_option (0, CS_OPT_MEM, GPOINTER_TO_SIZE (&gum_cs_mem_callbacks)); _gum_tls_init (); _gum_interceptor_init (); _gum_tls_realize (); }
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 (); }