您的位置:首页 > 理论基础

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 几个重要重要指令分解
指令
分解
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
Ip(Instruct Pointer)指令指针只能用伪指令,不能直接用指令赋值

2 实验操作

2.1 实验中的C代码



2.2 实验使用的Linux指令



2.3 汇编代码



3 代码分析

以2.3汇编代码前的标号为代码地址,且相邻两个地址的差为一个字。栈的基地址为100。

以下红色线为基地址指针所指地址,青色为栈顶指针地址。左侧小方框为寄存器中的数值。







内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐