ARMv7 寄存器详解大全( 八 )

  • 通过上两图 , 我们假设在函数b里面发生了异常 , 比如是SEGV异常 。

    1、通过读取寄存器R13和R7我们可以得到R13 = 0x0800(栈顶) R7 = 0x1000 。

    2、通过栈的布局情况我们了解到 , FP + 4为上一个函数的返回地址LR 。 在b崩溃的时候 , LR的值是*0X1004 = 0x300 , 即这个0x300就是a函数调用b函数的时候的下一条指令地址 。

    3、通过栈的布局情况我们了解到 , fp则存放的是上一个函数fp的地址 。 因此 , 我们可以拿到a函数的fp地址:*0x1000 = 0x2000 。

    4、重复2 3 步骤 , 我们可以获取到t函数调用a函数的时候的下一条指令地址:0x500 。

    因此 , 崩溃时候的调用栈是:

    点击(此处)折叠或打开

    1. b函数

    2. 0x300 (a函数)

      推荐阅读