CmBacktrace icon indicating copy to clipboard operation
CmBacktrace copied to clipboard

如何进行栈帧回溯的?

Open zhangshengping opened this issue 6 years ago • 4 comments

在编译器不保存FP(frame pointer)的情况下,如何在程序内进行栈帧回溯的?

zhangshengping avatar Sep 11 '18 09:09 zhangshengping

跟函数返回的过程是一样的,模拟函数返回的过程就可以进行栈帧回溯

leiddev avatar Nov 20 '18 01:11 leiddev

函数返回的时候是会调整SP(sub sp, #n)的,然后再通过bx lr,进行返回的,但是编写程序的时候是不知道每个函数的栈大小的. 这怎么模拟函数返回啊?

zhangshengping avatar Nov 21 '18 15:11 zhangshengping

那函数返回时是根据什么来调整SP的呢?寄存器里面应该是有这个信息的吧

leiddev avatar Nov 23 '18 09:11 leiddev

编译的时候确定的, 如 进入时执行了push lr, sub sp #20 , 对应的退出的时候会执行 add sp #20, pop pc.

zhangshengping avatar Nov 23 '18 15:11 zhangshengping