汇编语言一些寄存器的作用
来源:互联网 发布:java 知识库系统 开源 编辑:程序博客网 时间:2024/05/18 04:50
首先,需要了解c语言中汇编语言里eax,ebx,ecx,edx,ebp,edi,esi;mov,sub,add,jmp,jn,test;push,pop,call,ret,lea;这些都是什么意思。
eax,ebx,ecx,edx,esi,edi,dbp... ...都是x86汇编语言中cpu上的通用寄存器的名称,是三十二位的寄存器。如果用c语言来解释,可以把这些寄存器当作变量来待。
x86是指三十二位操作系统。
三十二位寄存器有许多用途,但是每个都有自己的专长,有各自的特别之处。
eax 是 “累加器”,是很多加法乘法指令的缺省寄存器。
ebx 是“基地址”,寄存器,在内存寻地址时存放地址。
ecx 是计时器,是重复前缀指令和loop指令的内定计时器。
edx则是被用来放帧数除法产生的余数。
esi/edi分别叫做“源/目标索引寄存器”。
ebp是"基址指针",他最经常被用作高级语言函数调用的“框架指针”在破解的时候,经常可以看见一个标准的函数起始代码;
push ebp;保存当前的ebp
mov, ebp, esp ;ebp设为当前堆栈指针//mov(传送)a(累加寄存器)#30h(十六进制立即数) 将立即数30h(十六进制)传送到A里面。
//堆栈指针:是一个抽象的数据类型,规定的两项必备的基本操作分别为入栈和出栈,并没有规定入栈和出栈要怎么实现。
sub ,esp,xxx;预留xxx字节给函数临时变量... ...
这样一来,ebp构成了函数的框架,在ebp上方分别是原来的ebp,返回地址和参数,ebp下面则是临时变量,函数返回是用作mov,esp,ebp/pop ebp/ret即可。
esp专门用作堆栈指针,被形象的称为栈顶指针,栈顶顶部是地址大小的区域,压入堆栈的数据愈多,esp也就越小。三十二平台上,esp每次减少四字节。
jmp 是汇编语言中的无条件跳转指令。无条件跳转指令可转到内存中任何程序段。转移地址可在指令中给出,也可以在寄存器中给出,或在储存器中指出。
test指令属于逻辑运算指令,不送回操作结果,二仅仅影响标志位。
lea指令的功能是将源操作数、即储存单元的有效地址(偏移地址)传送到目的操作数。lea有两个操作数。左边是目的操作数,表示操作结果保存在此,该指令目的的操作数只能是八个通用寄存器之一。右边的是源操作数,该指令的源操作数只能是一个存储单元,表达存储单元有多重寻址方式。
ret: 例如ret 8 意思是废除压入的eax,ebx;两个参数(两个寄存器占用了八个字节);并返回继续运行。
add是普通的加法指令,adc是带进位的加法指令。
call指令段内调用将指令指针ip入栈,调用先入栈段基址Cs,再入栈ip。call调用ret返回再将地址弹出,相关变量值改变。
- 汇编语言一些寄存器的作用
- 汇编语言中寄存器的作用
- 汇编语言中各寄存器的作用
- 汇编语言中各寄存器的作用
- [汇编语言]程序加载后,ds寄存器的作用是什么?
- 汇编语言中用到的寄存器
- 汇编语言相关寄存器的介绍
- 【汇编语言】CPU寄存器的种类
- 汇编语言常用的标志寄存器
- 【汇编语言】8086处理器标志寄存器的作用和DEBUG中的表示
- 汇编语言debug中的一些命令的作用的分析
- 汇编语言-寄存器
- 汇编语言:寄存器
- 汇编语言,寄存器
- 通用寄存器的作用
- 通用寄存器的作用
- 通用寄存器的作用
- 各寄存器的作用
- 数据操作
- fuzhaoyang 转:Java中String与byte[]的转换
- 如何在vue项目中使用md5.js及base64.js
- Node.js——module模块
- 初识AOP
- 汇编语言一些寄存器的作用
- 欢迎使用CSDN-markdown编辑器
- 购物车内样式(bootstrop样式)
- 一个小项目带你了解rest framework
- R-次要刻度线 参考线 图例
- vue.js
- iOS app开发第三方库
- Random ThreadLocalRandom 产生随机数
- 线程创建与使用