void gum_sanity_checker_begin (GumSanityChecker * self, guint flags) { GumSanityCheckerPrivate * priv = self->priv; GumBacktracer * backtracer = NULL; if (priv->backtrace_block_size != 0) backtracer = gum_backtracer_make_default (); if ((flags & GUM_CHECK_BLOCK_LEAKS) != 0) { priv->alloc_tracker = gum_allocation_tracker_new_with_backtracer (backtracer); if (priv->backtrace_block_size > 0) { gum_allocation_tracker_set_filter_function (priv->alloc_tracker, gum_sanity_checker_filter_backtrace_block_size, self); } priv->alloc_probe = gum_allocator_probe_new (); g_object_set (priv->alloc_probe, "allocation-tracker", priv->alloc_tracker, NULL); } if ((flags & GUM_CHECK_INSTANCE_LEAKS) != 0) { priv->instance_tracker = gum_instance_tracker_new (); gum_instance_tracker_set_type_filter_function (priv->instance_tracker, gum_sanity_checker_filter_out_gparam, self); gum_instance_tracker_begin (priv->instance_tracker, NULL); } if ((flags & GUM_CHECK_BLOCK_LEAKS) != 0) { gum_allocation_tracker_begin (priv->alloc_tracker); gum_allocator_probe_attach_to_apis (priv->alloc_probe, priv->heap_apis); } if ((flags & GUM_CHECK_BOUNDS) != 0) { priv->bounds_checker = gum_bounds_checker_new (backtracer, priv->output, priv->output_user_data); g_object_set (priv->bounds_checker, "front-alignment", priv->front_alignment_granularity, NULL); gum_bounds_checker_attach_to_apis (priv->bounds_checker, priv->heap_apis); } if (backtracer != NULL) g_object_unref (backtracer); }
static void test_bounds_checker_fixture_setup (TestBoundsCheckerFixture * fixture, gconstpointer data) { GumBacktracer * backtracer; backtracer = gum_fake_backtracer_new (NULL, 0); fixture->backtracer = GUM_FAKE_BACKTRACER (backtracer); fixture->output = g_string_new (""); fixture->checker = gum_bounds_checker_new (backtracer, test_bounds_checker_fixture_do_output, fixture); }