Linux内核分析——第一周学习笔记

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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程序,分析汇编代码理解计算机是如何工作的

我修改完毕的实验代码如下:

技术分享

编译:

 

将所得的汇编代码显示出来:

技术分享

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

技术分享

 

以上是关于Linux内核分析——第一周学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

《Linux内核分析》第一周笔记 计算机是如何工作的

Linux内核设计第一周学习总结 计算机如何工作

Linux内核分析学习笔记

《Linux内核分析》课程第一周学习总结

Linux学习笔记(第一周)

LINUX内核分析第一周学习总结——计算机是如何工作的