1 栈帧
我们知道,发生函数调用时,通常被调用函数会保存调用函数的现场,然后才会继续执行被调用函数的指令,被调用函数执行完成之后,就会恢复调用函数的现场,继续执行调用函数的指令。栈帧就是在堆栈中保存每一次函数调用现场的一个基本单元。每一次函数调用都会在堆栈中记录函数的栈帧。
2 汇编指令
下面我们反汇编下DbugExcShowAll函数,得到如下的反汇编代码。
DbugExcShowAll:
0x103e48cc 9421ffd0 stwu r1,-48(r1)
0x103e48d0 7c0802a6 mfspr r0,LR
0x103e48d4 93810020 stw r28,32(r1)
0x103e48d8 93a10024 stw r29,36(r1)
0x103e48dc 93e1002c stw r31,44(r1)
0x103e48e0 90010034 stw r0,52(r1)
0x103e48e4 7c3f0b78 or r31,r1,r1
0x103e48e8 3d20108d lis r9,0x108d #4237------r9=0x108d0000
0x103e48ec 8009a690 lwz r0,-22896(r9)-----
0x103e48f0 901f0008 stw r0,8(r31)
Stwu指令将调用函数的栈帧地址r1,存储到(r1-48)字