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
三、计算机是如何工作的
我认为计算机其实是很机械的在工作中,它只是从内存里取出的第一条指令开始,开始做对应的动作。从存储器中取出对应的数据,然后运算或者其他逻辑操作等,然后将结果送去对应的地址去。然后在进行下一条指令,重复一样的动作,直到结束。
一、实验步骤
首先借助实验楼这个平台进入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
三、计算机是如何工作的
我认为计算机其实是很机械的在工作中,它只是从内存里取出的第一条指令开始,开始做对应的动作。从存储器中取出对应的数据,然后运算或者其他逻辑操作等,然后将结果送去对应的地址去。然后在进行下一条指令,重复一样的动作,直到结束。
相关文章推荐
- Linux进程的查看和调度分别使用什么命令?
- OpenStack 部署总结之:在CentOS 6.5上使用RDO单机安装icehouse(Ml2+GRE)
- CentOS 7安装mysql
- Linux Mint (应用软件— 虚拟机:Virtualbox)
- 谈谈Linux打补丁的原理以及如何判别打补丁的错误 --- 从补丁学内核
- linux下为php添加iconv模块的方法
- linux下静态库编译使用复杂版
- 11款最棒的Linux数据恢复工具
- Android(Linux)线路规程的使用
- 监控 Linux 性能的 18 个命令行工具
- Linux中特殊字符
- cnetos6,centos7添加新网卡,系统不识别的解决办法
- linux内核中的likely和unlikely
- linux 命令 —— umask
- linux下简单编译与静态库编译使用
- centos7的网卡名修改为eth0
- Linux c 操作Mysql简单实例
- linux下使用yum安装mysql
- 关于Cygwin中编译FFmpeg时执行sh文件出现arm-linux-androideabi-gcc is unable to create an executable file.
- linux知识点:01