逆向_03通用寄存器宽度及简单汇编指令
通用寄存器及内存读写
通用寄存器继续深入
寄存器 | 编号(二进制) | 编号(十进制) | ||
---|---|---|---|---|
32位 | 16位 | 8位 | ||
EAX | AX | AL | 000 | 0 |
ECX | CX | CL | 001 | 1 |
EDX | DX | DL | 010 | 2 |
EBX | BX | BL | 011 | 3 |
ESP | SP | AH | 100 | 4 |
EBP | BP | CH | 101 | 5 |
ESI | SI | DH | 110 | 6 |
EDI | DI | BH | 111 | 7 |
mov指令
- r 通用寄存器
- m 代表内存
- imm 代表立即数
- 可简单理解为数据移动指令
- 白皮书内容
- MOV r/m8,r8
- MOV r/m16,r16
- MOV r/m32,r32
- MOV r8,r/m8
- MOV r16,r/m16
- MOV r32,r/m32
- MOV r8,imm8
- MOV r16,imm16
- MOV r16,imm32
- 格式
- MOV 目标操作数,源操作数
- 作用
- 拷贝源操作数到目标操作数
- Notes
- 源操作数可以是立即数、通用寄存器、段寄存器、或者内存单元
- 目标操作数可以是通用寄存器、段寄存器、或者内存单元
- 操作数的宽度必须一致
- 源操作数和目标操作数不能同时为内存单元
ADD 指令
- 加法指令
- 白皮书内容
- ADD AL,imm8
- ADD AX,imm16
- ADD EAX,imm32
- ADD r/m8,imm8
- ADD r/m16,imm16
- ADD r/m32,imm32
- ADD r/m16,imm8
- ADD r/m32,imm8
- ADD r/m8,r8
- ADD r/m16,r16
- ADD r/m32,r32
- ADD r8,r/m8
- ADD r16,r/m16
- ADD r32,r/m32
SUB指令
- 减法指令
- 白皮书内容
- SUB AL,imm8
- SUB AX,imm16
- SUB EAX,imm32
- SUB r/m8,imm8
- SUB r/m16,imm16
- SUB r/m32,imm32
- SUB r/m16,imm8
- SUB r/m32,imm8
- SUB r/m8,r8
- SUB r/m16,r16
- SUB r/m32,r32
- SUB r8,r/m8
- SUB r16,r/m16
- SUB r32,r/m32
AND指令
- 与操作指令
- 白皮书内容
- AND AL,imm8
- AND AX,imm16
- AND EAX,imm32
- AND r/m8,imm8
- AND r/m16,imm16
- AND r/m32,imm32
- AND r/m16,imm8
- AND r/m32,imm8
- AND r/m8,r8
- AND r/m16,r16
- AND r/m32,r32
- AND r8,r/m8
- AND r16,r/m16
- AND r32,r/m32
OR指令
- 或操作指令
- 白皮书内容
- OR AL,imm8
- OR AX,imm16
- OR EAX,imm32
- OR r/m8,imm8
- OR r/m16,imm16
- OR r/m32,imm32
- OR r/m16,imm8
- OR r/m32,imm8
- OR r/m8,r8
- OR r/m16,r16
- OR r/m32,r32
- OR r8,r/m8
- OR r16,r/m16
- OR r32,r/m32
XOR指令
- 异或操作指令
- 白皮书内容
- XOR AL,imm8
- XOR AX,imm16
- XOR EAX,imm32
- XOR r/m8,imm8
- XOR r/m16,imm16
- XOR r/m32,imm32
- XOR r/m16,imm8
- XOR r/m32,imm8
- XOR r/m8,r8
- XOR r/m16,r16
- XOR r/m32,r32
- XOR r8,r/m8
- XOR r16,r/m16
- XOR r32,r/m32
NOT指令
- 非操作指令
- 白皮书内容
- NOT r/m8
- NOT r/m16
- NOT r/m32
内存读写
寄存器和内存的区别
- 寄存器位于CPU的内部,执行速度快,价格比较贵
- 内存速度相对较慢,但成本较低,所以可以做的很大
- 寄存器和内存没有本质的区别,都是用于存储数据的容器,都是定宽的
- 寄存器常用的有8个
- EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI
- 计算机中几个常用的计量单位
- BYTE,WORD,DWORD
- 内存的数量特别庞大,无法为每个内存单元都起一个名字,因此采用编号来代替
- 我们称计算机是32位或者是64位的,很多书上说之所以叫32位寄存器是因为寄存器的宽度是32位,其实并不准确,因为还有很多寄存器是大于32位的
计算机内存的每一个字节都会有一个编号(即内存编号的单位是字节)
只要是32位的计算机,那么最多只能识别的内存为4G,对吗?
- 不对!!!
从指定内存中写入/读取数据
- MOV dword ptr ds:[0x12345678],0x12345678
- MOV eax,dword ptr ds:[0x12345678]
- dword:代表数据宽度,还有byte,word
- ptr:pointer,代表后面是一个指针
- ds:段寄存器
- Note:
- 内存地址编号不能随便写,因为内存是有保护的,并不是所有的内存都可以直接进行读写(需要特别的处理),建议地址编号写成esp的值
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 787772394@qq.com
文章标题:逆向_03通用寄存器宽度及简单汇编指令
本文作者:二豆子·pwnd0u
发布时间:2020-09-06, 11:47:42
最后更新:2023-05-18, 09:49:21
原始链接:http://blog.codefat.cn/2020/09/06/%E9%80%86%E5%90%91-03%E9%80%9A%E7%94%A8%E5%AF%84%E5%AD%98%E5%99%A8%E5%AE%BD%E5%BA%A6%E5%8F%8A%E7%AE%80%E5%8D%95%E6%B1%87%E7%BC%96%E6%8C%87%E4%BB%A4/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。