您的位置:首页 > 运维架构 > Linux

Linux内核分析——汇编代码执行及堆栈变化

2016-02-28 12:11 429 查看
张潇月《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

一、实验步骤

首先借助实验楼这个平台进入Linux系统,打开了Xfce终端将代码写入。



通过cd Code命令打开Code文件夹,将后面录入的代码放在文件夹中,便于下载代码,有利于后面的详细分析。



其中通过命令gcc main.c命令来编译代码;通过gcc -S -o main.s main.c –m32来反汇编代码。-m32代表的是32位系统。

将得到的main.s文件打开,删掉.*的语句,得到最终的、起真正关键作用的语句。





二、堆栈变化

按照计算机运行前后,代码排序为



18 pushl %ebp



19 movl %esp, %ebp



20 subl $4, %esp



21 movl $9, (%esp)



22 call f



9 pushl %ebp



10 movl %esp, %ebp



11 subl $4, %esp



12 movl 8(%ebp), %eax

13 movl %eax, (%esp)



14 call g



2 pushl %ebp



3 movl %esp, %ebp



4 movl 8(%ebp), %eax

5 addl $5, %eax (eax=9+5=14)

6 popl %ebp



7 ret



15 leave



16 ret



23 addl $2, %eax (eax=14+2=16)

24 leave



25 ret

三、计算机是如何工作的

我认为计算机其实是很机械的在工作中,它只是从内存里取出的第一条指令开始,开始做对应的动作。从存储器中取出对应的数据,然后运算或者其他逻辑操作等,然后将结果送去对应的地址去。然后在进行下一条指令,重复一样的动作,直到结束。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: