免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2209 | 回复: 2
打印 上一主题 下一主题

[C] PowerPC 下如何打出stack frame [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-02-27 15:56 |只看该作者 |倒序浏览
如题, 我知道在X86系统下, 可以利用ebp, esp打出stack frame, 以解析出all the variants, parameters and return address.
如果是PowerPC的CPU, 该如何打出stack frame呢? 请大牛们支招.

附在x86下dump stack frame 的代码:
        ......
        frame = (DCF_REGISTER *) regs->ebp;
        fcn_addr = regs->ra;
        stk_addr = regs->esp;
        for( cntr = 0; cntr < 2; cntr++ ) {
                // Format captions for stack dump.
                sprintf( out_bffr, "STACK: FCN ADDR = %lx", fcn_addr );

                // Set up dump contol infor for stack dump.
                stk_dump.caption = out_bffr;
                stk_dump.data_ptr = (void *) stk_addr;
                stk_dump.data_len = (char *) frame - (char *) stk_addr;

                // Dump stack data.
                DCF_Dump_Data( 1, &stk_dump, file, line, fmt_buf );

                // Advance to next function on the stack.
                if( frame == 0 ) {
                        break;
                }
                fcn_addr = *(frame+1);
                stk_addr = ((DCF_REGISTER) frame)
                        + 2 * sizeof( DCF_REGISTER );
                frame = (DCF_REGISTER *) *frame;
        }
        ...

论坛徽章:
0
2 [报告]
发表于 2013-02-27 22:55 |只看该作者
libc的powerpc32目录下backtrace.c, __backtrace().

论坛徽章:
0
3 [报告]
发表于 2013-02-28 12:03 |只看该作者
MaxWu 发表于 2013-02-27 22:55
libc的powerpc32目录下backtrace.c, __backtrace().


__backtrace()是用来打出stack trace(函数一级调用一级的关系), 而不是stack frame.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP