Linux内核分析-计算机汇编程序分析
2015-04-23 17:08
218 查看
转载自:http://blog.csdn.net/chris_renyi/article/details/44121341
《Linux内核分析》MOOC课程:在线课程链接http://mooc.study.163.com/course/USTC-1000029000
第一讲 计算机是如何工作的? 课堂笔记
@2015.03
------------------------------------------------------分割线--------------------------------------------------------------
1 基本理论
1.1 计算机结构
现在计算机结构为冯诺依曼体系结构,即存储程序计算机;由cup通过总线从内存中读取指令或数据。
1.2 通用寄存器
AX(AccumulateRegister)
BX(BaseRegister)
CX(CountRegister)
DX(DataRegister)
BP(Base Pointer)堆栈基指针
SP(StackPointer)堆栈顶指针
以上为16位,32位计算机在寄存器前加E,64位计算机在寄存器前加R
1.3 计算机指令(AT&T汇编风格,适用于Linux内核)
1.3.1 指令基本格式
格式:指令 源地址,目标地址
1.3.2 常见计算机汇编指令
mov、sub、and、add、ret
在每个指令后面紧跟“b,w,l,q”中的一个字母,分别代表8位、16位、32位、64位
1.3.4 内存寻址方式
寄存器寻址:使用寄存器名字,数据在寄存器所在的地址存取。例如,%ebx
立即数寻址:该数字表示数值,该数值做相关存取。例如,$0x12
直接寻址:该数字表示地址,数据在该地址里做相关存取。数据前面没有标志。
间接寻址:使用寄存器里的数据为地址,在该地址做相关存取。例如,(%ebx)
变址寻址:在寄存器中数据为地址的基础上进行地址偏移。例如,4(%ebx)
1.3.4 几个重要重要指令分解
Ip(Instruct Pointer)指令指针只能用伪指令,不能直接用指令赋值
2 实验操作
2.1 实验中的C代码
2.2 实验使用的Linux指令
2.3 汇编代码
3 代码分析
以2.3汇编代码前的标号为代码地址,且相邻两个地址的差为一个字。栈的基地址为100。
以下红色线为基地址指针所指地址,青色为栈顶指针地址。左侧小方框为寄存器中的数值。
《Linux内核分析》MOOC课程:在线课程链接http://mooc.study.163.com/course/USTC-1000029000
第一讲 计算机是如何工作的? 课堂笔记
@2015.03
------------------------------------------------------分割线--------------------------------------------------------------
1 基本理论
1.1 计算机结构
现在计算机结构为冯诺依曼体系结构,即存储程序计算机;由cup通过总线从内存中读取指令或数据。
1.2 通用寄存器
AX(AccumulateRegister)
BX(BaseRegister)
CX(CountRegister)
DX(DataRegister)
BP(Base Pointer)堆栈基指针
SP(StackPointer)堆栈顶指针
以上为16位,32位计算机在寄存器前加E,64位计算机在寄存器前加R
1.3 计算机指令(AT&T汇编风格,适用于Linux内核)
1.3.1 指令基本格式
格式:指令 源地址,目标地址
1.3.2 常见计算机汇编指令
mov、sub、and、add、ret
在每个指令后面紧跟“b,w,l,q”中的一个字母,分别代表8位、16位、32位、64位
1.3.4 内存寻址方式
寄存器寻址:使用寄存器名字,数据在寄存器所在的地址存取。例如,%ebx
立即数寻址:该数字表示数值,该数值做相关存取。例如,$0x12
直接寻址:该数字表示地址,数据在该地址里做相关存取。数据前面没有标志。
间接寻址:使用寄存器里的数据为地址,在该地址做相关存取。例如,(%ebx)
变址寻址:在寄存器中数据为地址的基础上进行地址偏移。例如,4(%ebx)
1.3.4 几个重要重要指令分解
指令 | 分解 |
pushl %eax | subl $4,%esp |
movl %eax ,(%esp) | |
popl %eax | movl (%esp),%eax |
addl $4,%esp | |
call 0x12345 | pushl %eip |
movl $0x12345,%eip | |
ret | popl %eip |
enter | pushl %ebp |
movl %esp,%ebp | |
Leave | movl %ebp,%esp |
popl %ebp |
2 实验操作
2.1 实验中的C代码
2.2 实验使用的Linux指令
2.3 汇编代码
3 代码分析
以2.3汇编代码前的标号为代码地址,且相邻两个地址的差为一个字。栈的基地址为100。
以下红色线为基地址指针所指地址,青色为栈顶指针地址。左侧小方框为寄存器中的数值。
相关文章推荐
- Linux内核分析-计算机汇编程序分析
- linux内核分析作业:以一简单C程序为例,分析汇编代码理解计算机如何工作
- 云课堂 Linux内核分析 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- linux内核分析作业:以一简单C程序为例,分析汇编代码理解计算机如何工作
- 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- 1、通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- Linux内核分析一:反汇编一个简单的C程序
- 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- 通过分析一个C程序的汇编指令执行过程,理解计算机的工作。
- 汇编一个简单的C程序,分析代码理解计算机是怎么工作的
- 深入理解计算机系统读书笔记之一个简单汇编程序的调试分析
- 第一周:通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- Linux内核分析01-分析汇编代码理解计算机是如何工作
- 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- Linux内核分析——分析C程序的反汇编内容
- 第1节 反汇编一个简单的C程序【Linux内核分析】
- Linux内核分析-反汇编一个简单的C程序并简单分析
- [Linux内核]从一个汇编分析计算机工作原理
- Linux内核分析课程--通过反汇编一个简单的c程序,分析汇编代码并理解计算机如何工作的
- 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的