现在的位置: 首页 > 操作系统 > 正文

linux内核分析—-计算机工作

2018年08月06日 操作系统 ⁄ 共 479字 ⁄ 字号 评论关闭

作者:牛鹏飞

原创作品转载请注明出处+《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

下图是一段简单的C代码,通过对它进行反汇编来分析函数调用时的堆栈工作情况;

通过命令

  1. gcc –S –o main.s main.c -m32
    生成main。s汇编文件;去掉以‘.’开头的汇编代码如下图:

分析代码首先代码从main标识符开始执行:

      从图中看出第2/3 9/10 18/19执行的指令相同,主要工作是保存当前栈基地址EBP,为被调用函数分配新的栈空间地址;

      

总结:

       从分析中可以看到:函数的调用过程如下:1.保留目前的程序执行位置即EIP寄存器当前的值到栈中,对应汇编指令为call指令;2.为新的函数建立新的栈空间,即栈基地址(EBP)和栈顶地址(ESP)指向同一个地址(新的地址ESP当前的所指位置),相当于汇编里的enter指令;3.函数体执行;4.恢复EBP和ESP值到调用者的栈空间,相当于汇编里的leave指令;5.恢复EIP的值为调用处,对应汇编为ret指令

抱歉!评论已关闭.