Linux内核分析——第一周学习笔记
20135313吴子怡.北京电子科技学院
chapter 1 知识点梳理
第一节 存储程序计算机工作模型
1.冯诺依曼体系结构:即具有存储程序的计算机体系结构。目前大多数拥有计算和存储功能的设备(智能手机、平板、计算机等)其核心构造均为冯诺依曼体系结构

a.从硬件来看:CPU与内存通过主线连接,CPU上的IP(可能是16、32、64位)总指向内存的某一块区域;IP指向的CS(代码段)也在内存中;CPU总是执行IP指向的指令。
b.从软件来看:API(应用程序编程接口,与编程人员)与ABI(程序与CPU的借口界面) 是两个比较重要的软件接口
2、CPU可以抽象成一个for循环,总是从内存中执行下一条指令。
内存:保存指令数据
CPU:解释执行指令、数据
内存与CPU通过总线连接。
3.其他
API:应用程序编程接口
ABI:二进制(指令编码)接口
4.例子
例如:32位计算机X86,EIP指向内存的某条指令
1、自动加到下一条指令,数值加一
2、可被其他指令修改,如CALL,RET,JMP等。
第二节 X86汇编基础
一、X86 CPU的寄存器

16位寄存器:AX,BX,CX,DX,BP,SI,DI,SP等
32位寄存器:EAX累加寄存器,EBX基址寄存器,ECX技术寄存器等 前面加上E的均为32位寄存器。

二、mov指令及几种内存寻址方式

1、movl
a.寄存器寻址%eax,%edx
即操作寄存器,与内存无关,相当于eax=edx
b.立即寻址$0x123,%edx
123这个16进制数值放进寄存器edx中($表示立即数)
c.直接寻址0x123,%edx
123这个地址指向寄存器edx(没有$表示地址)
c.间接寻址(%ebx),%edx
(%ebx)表示ebx这个寄存器存的值为内存地址
d.变值寻址4(%ebx),%edx
在间接寻址的基础上加上4
2、movb:8 bit;movw:16 bit
三、其他指令:push、pop、call、ret
1、pushl %eax
把eax压栈到堆栈栈底
即首先把esp减4
esp表示堆栈栈顶
ebp表示堆栈基址
2、popl %eax
把eax从堆栈栈顶取32位,放在寄存器eax中
即首先把栈顶esp的数值放在eax中,再把栈顶加4
3、call 0x12345
调用该地址
即将当前的eip(当前CPU执行命令的指针)压栈,赋给eip一个新值(CPU下一条执行的指令)
4、ret
即将call时保存的eip还原到eip寄存器,return call之前的那条指令
eip(*)这个*指程序员不能直接修改eip
chapter 2 小练习

堆栈变化如下:


chapter 3 将C代码编译成汇编代码
实验:通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
我修改完毕的实验代码如下:

编译:

由于后来转在Ubuntu虚拟机上操作,将所得的汇编代码显示出来如下:




去掉用于关联的代码得到纯汇编代码:

堆栈变化情况演示如下图:








过程完毕。
chapter 4 总结
对“计算机是如何工作的”理解
1、计算机是依据冯诺依曼体存储结构,依据其核心思想——存储程序计算机工作模型,按程序编排的顺序,一步一步地取出指令,自动地完成指令规定的操作。
2、计算机的工作过程其实集中在了CPU和为其传输数据的地址总线上。计算机执行的最底层的操作其实就是N种指令而已。
3、CPU可以抽象成一个for循环,总是从内存中执行下一条指令。内存负责保存指令数据,CPU负责解释执行指令、数据。内存与CPU通过总线连接。
4、CPU中一个关键寄存器IP总是指向内存中某块区域。计算机在工作时会先从内存中取出一条IP指向的指令给CPU执行,按指令的要求从存储器中取出数据进行指定的运算和逻辑操作,然后再把结果送到内存中去。
chapter 5 附录
作者:吴子怡.北京电子科技学院
原创作品转载请注明出处
《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
Linux内核分析——第一周学习笔记的更多相关文章
- linux内核分析第一周学习笔记
linux内核分析第一周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
- 20135320赵瀚青LINUX内核分析第一周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.概述 第一周的学习内容主 ...
- Linux内核分析——第一周学习笔记20135308
第一周 计算机是如何工作的 第一节 存储程序计算机工作模型 1.冯·诺依曼结构模型:冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构.程序指令存储地址和数据存储 ...
- LINUX内核分析第一周学习总结——计算机是如何工作的
LINUX内核分析第一周学习总结——计算机是如何工作的 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course/ ...
- Linux内核分析第二周学习笔记
linux内核分析第二周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
- Linux内核分析第一周学习博客 --- 通过反汇编方式学习计算机工作过程
Linux内核分析第一周学习博客 通过反汇编方式学习计算机工作过程 总结: 通过这次对一个简单C程序的反汇编学习,我了解到计算机在实际工作工程中要涉及大量的跳转指针操作.计算机通常是顺序执行一条一条的 ...
- 三20135320赵瀚青LINUX内核分析第二周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.计算机的三个法宝 存储程 ...
- Linux内核分析第一周学习总结:计算机是如何工作的?
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.冯诺依曼体系 ...
- Linux内核分析——第二周学习笔记
20135313吴子怡.北京电子科技学院 chapter 1 知识点梳理 (一)计算机是如何工作的?(总结)——三个法宝 ①存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: ②函数调用堆栈,高 ...
随机推荐
- Angular2学习笔记(1)——Hello World
1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之前主要使用的是jQuery,由于 ...
- WCF简单实例--用Winform启动和引用
以订票为例简单应用wcf程序,需要的朋友可以参考下 本篇转自百度文档,自己试过,确实可以用. 以订票为例简单应用wcf 新建一个wcf服务应用程序 在IService1.cs定义服务契约 namesp ...
- [BeiJing2006]狼抓兔子
题面 一眼看就是最小割板子题,建图也很直观,注意每一条边建双向边其实不用建4条边,只要反向边的容量和正边相同就行.然后直接跑最大流板子就行.不过此题拿vector存图会MLE……而拿链前存图就能卡过去 ...
- Django使用静态文件
除了由服务器生成的HTML文件外,网页应用一般需要提供其它必要的文件 —— 比如图片文件.JavaScript脚本和CSS样式表 —— 来为用户呈现出一个完整的网站. 在Django中,我们将这些文件 ...
- Android调用相机拍照并返回路径和调用系统图库选择图片
调用系统图库: Intent intent = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI); ...
- 关于Spring IOC (DI-依赖注入)需要知道的一切
关联文章: 关于Spring IOC (DI-依赖注入)你需要知道的一切 关于 Spring AOP (AspectJ) 你该知晓的一切 <Spring入门经典>这本书无论对于初学者或者有 ...
- 利用jenkins打造通过自定义参数更新svn 指定文件任务
jenkin可以执行很多构建任务,有时候我们需要在执行构成中同构shell对服务器进行操作而且还需要进行参数的传入 比如:我要利用svn进行本地代码的更新,单又不是所有代码的更新,只更新指定的1个或这 ...
- 理解javascript观察者模式(订阅者与发布者)
什么是观察者模式? 观察者模式又叫做发布订阅模式,它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生改变时就会通知所有观察着对象.它是由两类对象组成,主题和观察者 ...
- 《Java程序设计》第2周学习总结(Markdown语法修改版)
20175105 2018-2019-2 <Java程序设计>第2周学习总结 Vim操作的一些总结 这些天通过学习,对于vim的操作有了很大的提升,下面我把vim的比较常见的操作方式做了归 ...
- day62
一.组件 组件都具有模板,template new Vue()创建的是根组件 组件与实例一一对应,创建一个实例就是创建了一个组件,同理创建一个组件就相当于创建了一个实例 根组件的挂载点一般就是根组件的 ...