Linux内核分析第一周总结
冯诺依曼体系结构
储存程序计算机工作模型
- 硬件
- 程序员
CPU当作for循环;
IP:
- 16位计算机:IP
- 32位计算机:eIP
- 64位计算机:rIP
X86汇编基础
X86的CPU寄存器
X86的CPU寄存器:
- 通用寄存器
- 段寄存器
- 标志寄存器
32寄存器被称为通用寄存器,一般以E为首字母
32位寄存器=高16位+低16位
低16位寄存器中又存在AX,BX,CX,DX,BP,SI,DI,SP八个寄存器
通用寄存器中比较重要的如EBP(堆栈基指针),ESP(堆栈顶指针)
堆栈是计算机中非常基础的东西
段寄存器分为:CS,DS,ES,SS,FS,GS
指令内存地址的描述:CS+EIP
X86-64bit:通用寄存器扩展至64位,一般以R为首字母
计算机的汇编指令
mov指令:
b代表8位,w代表16位,l代表32位,q代表64位
movl %eax , %edx eax=edx; (寄存器寻址)
将eax(寄存器)内存放至edx中
movl $0x123 , %edx eax=edx; (立即寻址)
将$0x123放至edx中
movl %eax , %edx eax=edx; (直接寻址)
将eax(寄存器)内存放至edx中
movl (%ebx) , %edx edx=(int 32_t*)ebx; (间接寻址)
将将ebx的值作为内存地址所访问到的值放至edx中
movl 4(%ebx) , %edx edx=(int 32_t*)(ebx + 4); (变址寻址)
在间接寻址之时改变寄存器的数值
X86系统中,大多数指令可以直接访问内存地址
另外几个重要指令:
pushl %eax :
- subl $4 , %esp
- movl %eax , (%esp)
popl %eax :
- movl (%esp) , %eax
- addl $4 , %esp
call 0x12345:
- pushl %eip(*)
- movl $0x12345 , %eip(*)
ret(return):
- popl %eip(*)
重要寄存器
eip:从main开始,自加1,调用其它指令时,修改eip,
无特殊说明时,eip在该条指令结束时,指向下一条指令
ebp:总是指向堆栈的栈底
esp:总是指向堆栈的栈顶
eax:暂存数据
实验分析:
学习总结:
首先,对于计算机系统而言,堆栈是非常重要的组成部分,许多指令在运行的过程中都是通过堆栈的方式来进行操作的。
其次,对于几个重要寄存器的掌握是非常必要的。