逆向_03通用寄存器宽度及简单汇编指令

  1. 通用寄存器及内存读写
    1. 通用寄存器继续深入
    2. mov指令
    3. ADD 指令
    4. SUB指令
    5. AND指令
    6. OR指令
    7. XOR指令
    8. NOT指令
    9. 内存读写

通用寄存器及内存读写

通用寄存器继续深入

寄存器 编号(二进制) 编号(十进制)
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
    1. 源操作数可以是立即数、通用寄存器、段寄存器、或者内存单元
    2. 目标操作数可以是通用寄存器、段寄存器、或者内存单元
    3. 操作数的宽度必须一致
    4. 源操作数和目标操作数不能同时为内存单元

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

内存读写

  • 寄存器和内存的区别

    1. 寄存器位于CPU的内部,执行速度快,价格比较贵
    2. 内存速度相对较慢,但成本较低,所以可以做的很大
    3. 寄存器和内存没有本质的区别,都是用于存储数据的容器,都是定宽的
    4. 寄存器常用的有8个
      • EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI
    5. 计算机中几个常用的计量单位
      • BYTE,WORD,DWORD
    6. 内存的数量特别庞大,无法为每个内存单元都起一个名字,因此采用编号来代替
    7. 我们称计算机是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" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏

/*爱心代码*/ /*雪花效果*/ /*百度代码自动提交*/