linux大西瓜 发表于 2016-02-10 16:21

关于c_backtrace 里面确定pc偏移量的疑问

最近在看c_backtrace,我把里面计算pc offset的代码抠出来在arm上实验
asm_test:
        stmfdsp!, {R0-R9,lr}
       
1:        stmfdsp!, {pc}
      ldr        r0, , #4
        adr        r1, 1b
        sub        r2, r0, r1
        bprintr;

        ldmfdsp!, {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, , #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的偏移了

linux大西瓜 发表于 2016-02-10 20:52

没有高手愿意讲一下吗,求教啊,各位大神

linux大西瓜 发表于 2016-02-11 13:28

差不多了解了~~
页: [1]
查看完整版本: 关于c_backtrace 里面确定pc偏移量的疑问