lab1唯一需要写的代码就是第三部分,backtrace的代码如下,其实这一部分,并不难,就是自己拖了太长时间,拖延症很严重。
uint32_t ebp,eip;
struct Eipdebuginfo info;
int i=0;
ebp=read_ebp();
while(ebp!=0) {
eip=*((uint32_t *)(ebp+4));
// change ip to addr
// debuginfo_eip(uintptr_t addr, struct Eipdebuginfo *info)
debuginfo_eip((uintptr_t)eip,&info);
cprintf("ebp %0x eip %0x ",ebp,eip);
cprintf("args ");
for(i=0;i<=4;i++)
cprintf("%0x ",*(uint32_t *)(ebp+8+4*i));
cprintf("\n");
cprintf(" eipfile: %s eipfunc: %s ",info.eip_file,info.eip_fn_name);
cprintf("\n");
ebp=*((uint32_t *)ebp);
}