iOS 崩溃时通过 CPU 寄存器和堆栈内存恢复完整调用栈。每个函数调用会在堆栈上创建一个堆栈帧,包含返回地址、帧指针(FP)、局部变量和参数。以 ARM64 架构为例,遍历过程分为三步:第一帧从 PC 寄存器获取当前崩溃点地址;第二帧从 LR 寄存器获取调用者地址;第三帧及以后通过帧指针链从堆栈内存中逐帧读取返回地址和上一帧的 FP 指针,直到 FP 无效时结束遍历。遍历过程中需要注意三个关键点:必须安全访问内存防止访问无效内存导致二次崩溃;需要检测堆栈溢出防止在堆栈损坏时无限遍历;不同 CPU 架构的地址可能有特殊标记,需要进行规范化处理。
加载中...