static void	print_backt(bin_handler_t* binh, addr_t addr)
{
  bin_t*	bin;
  int		i;
  sym_t*	sym;
  debug_t*	debug;

  nbrtab++;
  for (i = 0; i < nbrtab; i++)
    pverbose(1, "\t");
  pverbose(1, " 0x%x", addr);
  
  bin = bin_find(binh, addr);

  if (bin)
    {
      sym = sym_get_frm_addr(bin->syms, addr, APPROACHED);
      if (sym)
	{
	  pverbose(2, " (%s)", sym->name);
	  debug = debug_get_frm_addr(bin->debugs, sym->addr);
	  if (debug)
	    pverbose(2, " @ %s:%d", debug->file, debug->line);
	}
      else
	pverbose(2, " (??)");
    }
  pverbose(1, "\n");
}
Exemplo n.º 2
0
struct bin *bin_add(const char *name, struct bin_head *head)
{
	struct bin *b;
	int name_len;

	b = bin_find(name, head);
	if(b)
		return b;

	b = malloc(sizeof *b);
	if(!b) {
		perror("malloc");
		return NULL;
	}

	name_len = strlen(name);
	b->name = malloc(name_len + 1);
	if (!b->name) {
		perror("malloc");
		free(b);
		return NULL;
	}
	memcpy(b->name, name, name_len);
	b->name[name_len] = 0;

	TAILQ_INIT(&b->entries);
	LIST_INSERT_HEAD(head, b, list);

	return b;
}
Exemplo n.º 3
0
int main()
{
	int arr[10] = {3,2,1,5,8,9,0,22,80,60};
	bubble_sort(arr,N);
	printf("%d\n",bin_find(arr, N, -2));
	return 0;
}
static void	print_call(tracee_t* tracee, int ret, addr_t addr)
{
  bin_t*	bin;
  int		i;
  arg_t*	return_info;

  if (ret > 0)
    {
      if (ret == CALL || ret == EXTCALL || ret == PLTCALL)
	{
	  nbrtab++;

	  /*
	  ** Try to get binary which contains the addr.
	  ** Reload depends if not found and try again.
	  */
	  bin = bin_find(tracee->binh, addr);
	  if (!bin)
	    {
	      bin_refresh_depends_list(proc_get_depends_list(tracee->proc),
				       tracee->binh);
	      bin = bin_find(tracee->binh, addr);
	    }

	  for (i = 0; i < nbrtab; i++)
	    pverbose(1, "\t|");
#ifdef __USE_LONG_ADDR_T__
	  pverbose(1, " 0x%lx", addr);
#else
	  pverbose(1, " 0x%x", addr);
#endif /* __USE_LONG_ADDR_T__ */
	  print_binsym(tracee, bin, addr, ret);
	  pverbose(1, "\n");

	  if (ret == EXTCALL)
	    nbrtab--;
	}
      else if (ret == RET)
	{
	  /*
	  ** HAN !
	  */
	  if (nbrtab > 0)
	    {
	      /*
	      ** Print ret return.
	      */
	      if (return_debuginfo_list)
		{
		  return_info = (arg_t*) return_debuginfo_list->value;
		  if (return_info)
		    {
		      if (proc_seek_return_value(tracee->proc, return_info))
			{
			  for (i = 0; i < nbrtab; i++)
			    pverbose(3, "\t|");
			  pverbose(3, " %s %s() = %s\n", return_info->type, return_info->name, return_info->value);
			}
		    }
		  return_debuginfo_list = list_del(return_debuginfo_list, return_info);
		}
	      /*
	      ** Print ret address
	      */
	      for (i = 0; i < nbrtab; i++)
		pverbose(1, "\t|");

#ifdef __USE_LONG_ADDR_T__
	      pverbose(1, " ret @ 0x%lx", addr);
#else
	      pverbose(1, " ret @ 0x%x", addr);
#endif /* __USE_LONG_ADDR_T__ */

	      pverbose(1, "\n");

	      nbrtab--;
	    }
	}
    }
}