1
0
mirror of https://github.com/ioacademy-jikim/debugging synced 2025-06-06 23:46:15 +00:00
debugging/01_day/backtrace/backtrace_4.c
2015-12-13 22:34:58 +09:00

30 lines
492 B
C

#define _GNU_SOURCE
#include <stdio.h>
#include <dlfcn.h>
void **getEBP(int dummy)
{
void **ebp = (void**)&dummy - 2 ;
return ebp;
}
void print_gnu_backtrace(void)
{
int dummy;
int frame = 0;
Dl_info dlip;
void **ebp = getEBP(dummy);
void **ret = *(ebp+1);
ebp = *ebp;
printf("Stack backtrace_3:\n");
while(ebp)
{
if( dladdr(ret, &dlip) == 0 )
break;
printf("Frame %d : [ebp=%p] [ret=%p] %s\n", frame++, ebp, ret, dlip.dli_sname );
ret = *(ebp + 1);
ebp = *ebp;
}
}