zoukankan      html  css  js  c++  java
  • 了解linux 内核代码dump_stack()执行流程

           关键寄存器介绍:

    寄存器含义
    r0-r3 用作函数传参,例如函数A调用函数B,如果A需要向B传递参数,则将参数放到寄存器r0-r3中,如果参数个数大于4,则需要借用函数的栈空间。
    r4-r11 变量寄存器,在函数中可以用来保存临时变量。
    r9(SB) 静态基址寄存器。
    r10(SL) 栈界限寄存器。
    r11(FP) 帧指针寄存器,通常用来访问函数栈,帧指针指向函数栈中的某个位置。
    r12(IP) 内部过程调用暂存寄存器。
    r13(SP) 栈指针寄存器,用来指向函数栈的栈顶。
    r14(LR) 链接寄存器,通常用来保存函数的返回地址。
    r15(PC) 程序计数器,指向代码段中下一条将要执行的指令,不过由于流水线的作用,PC会指向将要执行的指令的下一条指令。

    内核中的函数栈

    内核中,一个函数的代码最开始的指令都是如下形式:

                mov   ip, sp
                stmfd sp!, {r0 - r3} (可选的)
                stmfd sp!, {..., fp, ip, lr, pc}
                ……

    从其中两条stmfd(压栈)指令可以看出,一个函数的函数栈的栈底(高地址)的结构基本是固定的,如下图: 

    详细参考https://blog.csdn.net/jasonchen_gbd/article/details/45585133

  • 相关阅读:
    面向对象与组合
    异常处理和三级菜单练习
    装饰器和生成器
    序列化模块
    leetcode_498. 对角线遍历
    leetcode_566. 重塑矩阵
    leetcode_59. 螺旋矩阵 II
    leetcode_54. 螺旋矩阵
    leetcode_396. 旋转函数
    leetcode_200. 岛屿数量
  • 原文地址:https://www.cnblogs.com/luluping/p/13917390.html
Copyright © 2011-2022 走看看