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

来源:互联网 发布:prisma 离线 知乎 编辑:程序博客网 时间:2024/04/30 05:38

作者:牛鹏飞

原创作品转载请注明出处+《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指令






0 0
原创粉丝点击