CmBacktrace
CmBacktrace copied to clipboard
如何进行栈帧回溯的?
在编译器不保存FP(frame pointer)的情况下,如何在程序内进行栈帧回溯的?
跟函数返回的过程是一样的,模拟函数返回的过程就可以进行栈帧回溯
函数返回的时候是会调整SP(sub sp, #n)的,然后再通过bx lr,进行返回的,但是编写程序的时候是不知道每个函数的栈大小的. 这怎么模拟函数返回啊?
那函数返回时是根据什么来调整SP的呢?寄存器里面应该是有这个信息的吧
编译的时候确定的, 如 进入时执行了push lr, sub sp #20 , 对应的退出的时候会执行 add sp #20, pop pc.