关于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的偏移了 没有高手愿意讲一下吗,求教啊,各位大神 差不多了解了~~
页:
[1]