免费注册 查看新帖 |

Chinaunix

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

[内核模块] 关于c_backtrace 里面确定pc偏移量的疑问 [复制链接]

论坛徽章:
3
程序设计版块每日发帖之星
日期:2016-02-13 06:20:00程序设计版块每日发帖之星
日期:2016-02-14 06:20:00程序设计版块每日发帖之星
日期:2016-02-14 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-02-10 16:21 |只看该作者 |倒序浏览
最近在看c_backtrace,我把里面计算pc offset的代码抠出来在arm上实验
asm_test:
        stmfd  sp!, {R0-R9,lr}
       
1:        stmfd  sp!, {pc}
        ldr        r0, [sp], #4
        adr        r1, 1b
        sub        r2, r0, r1
        b  printr;

        ldmfd  sp!, {R0-R9,pc}
       
void printr(unsigned int x0,unsigned int x1,unsigned int x2)
{
    printf("R0 0x%X R1 0x%X R2 0x%X\n",x0,x1,x2);
}

但是打印的结果R0 0x84E4 R1 0x84D8 R2 0xC,为什么偏移量是12不是8呢

objectdump之后的结果
000084d4 <asm_test>:
    84d4:        e92d43ff         push        {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, lr}
    84d8:        e92d8000         push        {pc}
    84dc:        e49d0004         pop        {r0}                ; (ldr r0, [sp], #4)
    84e0:        e24f1010         sub        r1, pc, #16        ; 0x10
    84e4:        e0402001         sub        r2, r0, r1
    84e8:        eaffffc9         b        8414 <printr>
    84ec:        e8bd83ff         pop        {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, pc}
根据objdump来看 pc在压栈的时候世纪已经指向+12的偏移了

论坛徽章:
3
程序设计版块每日发帖之星
日期:2016-02-13 06:20:00程序设计版块每日发帖之星
日期:2016-02-14 06:20:00程序设计版块每日发帖之星
日期:2016-02-14 06:20:00
2 [报告]
发表于 2016-02-10 20:52 |只看该作者
没有高手愿意讲一下吗,求教啊,各位大神

论坛徽章:
3
程序设计版块每日发帖之星
日期:2016-02-13 06:20:00程序设计版块每日发帖之星
日期:2016-02-14 06:20:00程序设计版块每日发帖之星
日期:2016-02-14 06:20:00
3 [报告]
发表于 2016-02-11 13:28 |只看该作者
差不多了解了~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP