您的位置:首页 > 理论基础

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

2015-03-08 23:29 267 查看
作者:牛鹏飞原创作品转载请注明出处+《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000下图是一段简单的C代码,通过对它进行反汇编来分析函数调用时的堆栈工作情况;通过命令
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指令
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: