LInux内核分析——计算机是如何工作的进行
万子惠 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ”
实验部分(反汇编简单的C程序)
代码:
int g(int x)
{
return x + 6;
}
int f(int x)
{
return g(x);
}
int main(void)
{
return f(4) + 8;
}
最后结果应为18
- 在Code下新建main.c


- 进行编译和反编译


- 反编译结果如下

清理完后*这里vim推荐使用dd(删除整行)

(清理掉.开头的部分)
那么接下来我们开始分析了,这里我们先准备好环境如图
和视频里一样我们简化地址值(本应该是一个向下增长,地址逐渐减小的值)

首先看从main函数开始看:
1.将ebp的值入栈,入栈有两个效果,一是esp向下一位增长一位,然后是在现在的esp上存入ebp的值(当前为0)。

2.将esp的值赋给ebp,就是把ebp移到和esp相同位置。

3.将esp向下移4

4.在esp的位置上存上4

call f=>存储call的下一条指令位置(addl) ,然后跳转到f所在的位置

6.esp向下移动一格并存入ebp当前的值(1)

7.将ebp移到esp当前的位置

8.esp向下移动一格

9.将edp上上在走两格的数据放入eax

10.将eax的值存到esp的位置上

- call g=>存储call的下一条指令位置(ret) ,然后跳转到g所在的位置

12.ebp(4)的值入栈

13.将ebp移到esp的位置

14.将当前ebp的前两个位置的值(4)赋给eax

15.将当前esp的值(4)赋给ebp, esp向上移动一格

16.返程咯,出栈,ebp回到上一个被记录的位置,esp上移

ret=popl %eip

18.回到15行
leave:movl %ebp,%esp
popl %ebp

ret=popl %eip

20.回到23行,eax加8



22.ret,eip回到之前的堆栈
最后的返回值为18
总结部分
part1
学习到汇编语言的基本知识,以及一些名词的意思。
API:程序员与计算机的 接口界面
ABI:二进制接口
cs:eip :用来准确定位指令
几种计算指令:[b,w,l,q:8位,16位,32位,64位]
movl %eax,%edx 寄存器寻址
movl $0x123,%edx 立即数寻址
movl 0x123,%edx 直接寻址
movl (%edx),%edx 间接寻址
movl 4(%edx),%edx 变址寻址(edx=*(int 32_t*)(edx+4))
pushl %eax =>sub $4,%esp
movl %eax,(%esp)
popl %eax =>movl(%esp),%eax
movl $4,%esp
call X (保存当前的eip并读取下条为新eip)
ret =>popl %eip
enter =>push %ebp (创建新空栈)
=>movl %esp,%ebp
leave =>movl %ebp,%esp (撤销函数调用堆栈)
=>popl %ebp
ret:pop eip
堆栈调用特性:向下伸长,向上还原
part2我对计算机如何工作的理解
总体来讲,我觉得用冯诺依曼的模型来描述计算机的工作过程是很精到的。
(特别是对汇编代码进行了一步一步的分析之后,就更能深入体会到这种过程。)
我觉得老师视频里边的那个图更好说明这种方式
在我来用文字说明的话,计算机就是通过cpu的运行经过总线调用内存中数据存储的部分一条一条的按照顺序执行不停地进行存储修改等变化操作,使得我们得到自己想要得到的效果以及存储内容。
part3 学习感受
视频都裁剪得很短,看起来很有快感啊。之前学习过有关汇编的知识但都忘得差不多了,在这个视频多多少少补全了回来,感觉不错。计算机的脑子是很死很顺溜的,所以为了实现强大的功能,它的基本的汇编语言的确就是繁琐的,不算绕。希望在这里能打好基础,往后的学习能更加轻松些。
LInux内核分析——计算机是如何工作的进行的更多相关文章
- linux内核分析--计算机是如何工作的
实验部分 使用gcc -S -o main.s main.c -m32命令将源代码编译成汇编代码. 源代码如下: int g(int x) { return x + 9; } int f(int x) ...
- Linux内核分析— —计算机是如何工作的(20135213林涵锦)
实验部分 (以下命令为实验楼64位Linux虚拟机环境下适用,32位Linux环境可能会稍有不同) 使用 gcc –S –o main.s main.c -m32 命令编译成汇编代码, int g(i ...
- Linux内核分析——计算机是如何工作的
马悦+原创作品转载请注明出处+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.计算机是如何工作的 ( ...
- Linux内核分析 计算机是如何工作的——by王玥
1.冯诺依曼体系结构:也就是指存储程序计算机 硬件(存储程序计算机工作模式): 软件(程序员角度): 2.API:程序员与计算机的接口界面 ABI:程序与CPU的接口界面 3.X86的实现: 4.X8 ...
- Linux内核分析——操作系统是如何工作的
万子惠 + 原创作品转载请注明出处 + <Linux内核分析> 实验部分 使用实验楼的虚拟机打开shell 然后cd mykernel 您可以看到qemu窗口输出的内容的代码mymain. ...
- Linux内核分析— —操作系统是如何工作的(20135213林涵锦)
mykernel实验指导(操作系统是如何工作的) 实验要求 运行并分析一个精简的操作系统内核,理解操作系统是如何工作的 使用实验楼的虚拟机打开shell cd LinuxKernel/linux-3. ...
- linux内核分析--操作系统是如何工作的?
一个简单的时间片轮转多道程序 操作系统的"两把剑":中断上下文(保存现场和恢复现场)和进程上下文的切换 源代码的分析 *使用的源代码为视频中所使用的精简内核的源代码 首先分析myp ...
- Linux内核分析--操作系统是如何工作的
“平安的祝福 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ” 一.初 ...
- 20135239益西拉姆 Linux内核分析 操作系统是怎样工作的?
益西拉姆+ 原创作品+ <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ” 堆栈 堆栈是C语言程序运行时 ...
随机推荐
- 字典的循环和if语句
字典是键-值(key-value)存储,循环的时候也是以键为对象 d = {'Michael': 95, 'Tracy': 85,'Bob': 75} for x in d : print x 输出结 ...
- Android 编译时注解解析框架
2.注解 说道注解,竟然还有各种分类,得,这记不住,我们从注解的作用来反推其分类,帮助大家记忆,然后举例强化大家的记忆,话说注解的作用: 1.标记一些信息,这么说可能太抽象,那么我说,你见过@Over ...
- Android动画Drawable Animation
Drawable Animation是逐帧动画,那么使用它之前必须先定义好各个帧.我们可以通过代码定义,也可以使用xml文件定义,一般使用后者.如下: <?xml version="1 ...
- 欧姆龙PLC---FINS/TCP
ETN 21 以太网fins/tcp命令 (1)将电脑和PLC设置为同一个网段 例如电脑IP为192.168.18.214,PLC的IP为192.168.18.4(PLC的端口默认为9600) (2) ...
- HDU4511 AC自动机+dijkstra
题意: Description 终于放寒假了,小明要和女朋友一起去看电影.这天,女朋友想给小明一个考验,在小明正准备出发的时候,女朋友告诉他,她在电影院等他,小明过来的路线必须满足给定的规则: 1. ...
- Eclipse+Tomcat+MAVEN+SVN项目完整环境搭建
1.JDK的安装 首先下载JDK,这个从sun公司官网可以下载,根据自己的系统选择64位还是32位,安装过程就是next一路到底.安装完成之后当然要配置环境变量了. ————————————————— ...
- gcc -fvisibility=hidden,-fPIC选项
1. http://www.tuicool.com/articles/fy6Z3aQ 2. http://www.ibm.com/developerworks/cn/linux/l-cn-sdlsta ...
- windows目录选择 文件选择 文件保存对话框
打开文件对话框 const char pszFilter[] = _T("EXE File (*.txt)|*.txt|All Files (*.*)|*.*||"); CFile ...
- How to Create Mixed Reality Videos for the Vive - with Two Controllers
http://secondreality.co.uk/blog/how-to-create-mixed-reality-videos-for-the-vive-with-two-controllers ...
- CentOS6.8下部署Zabbix3.0
Centos6.8下部署安装zabbix3.0: 环境要求 PHP >= 5.4 (CentOS6默认为5.3.3,需要更新) curl >= 7.20 (如需支持SMTP认证,需更新) ...