示例#1
0
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);
}
示例#2
0
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);
}