逆向反汇编: 内存操作、常用指令操作数、寻址方式

一、常用指令:MOV指令、ADD指令、SUB指令、AND指令、OR指令、XOR指令、NOT指令
MOV 的语法:
      MOV r/mX,rX    r 通用寄存器,X 表示位数可以8、16、32
      MOV rX,r/mX    m 代表内存
      MOV rX, immX   imm 代表立即数
1、源操作数可以是立即数、通用寄存器、段寄存器、或者内存单元.
2、目标操作数可以是通用寄存器、段寄存器或者内存单元.
3、操作数的宽度必须一样.
4、源操作数和目标操作数不能同时为内存单元.
mov dword ptr ds:[0x0012FF34],0x12345678 的含义:

dword :要读/写多少此时是4字节   byte == 1字节  word == 2字节
ptr: Point 代表后面是一个指针 (指针的意思就是里面存的不是普通的值,而是个地址)
ds:段寄存器
0x0012FF34:内存编号,必须是32位的  前面0可以省略
注意:地址编号不要随便写,因为内存是有保护的,并不是所有的内存都可以直接读写(需要特别处理)

ADC指令:带进位加法
        格式:ADC  R/M,R/M/IMM   两边不能同时为内存  宽度要一样
SBB指令:带借位减法
        格式同上;
XCHG指令:交换数据
        格式同上;
MOVS指令:移动数据  内存-内存
        MOVS BYTE|WORD|DWORD PTR ES:[EDI],BYTE PTR DS:[ESI]
STOS指令:讲Al/AX/EAX的值存储到[EDI]指定的内存单元
       STOS BYTEBYTE|WORD|DWORD PTR ES:[EDI]
REP指令:按计数寄存器 (ECX) 中指定的次数重复执行字符串指令

MOVSX 先符号扩展,再传送
       MOV AL,80
       MOVSX CX,AL
MOVZX 先零扩展,再传送. 
       MOV AL,80
       MOVSX CX,AL

二、寄存器与内存区别:
1、寄存器位于CPU内部,执行速度快,但比较贵。
2、内存速度相对较慢,但成本较低,所以可以做的很大
3、寄存器和内存没有本质区别,都是用于存储数据的容器,都是定宽的。
4、寄存器常用的有8个:EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI。
5、计算机中的几个常用计量单位:BYTE WORD DWORD
我们称计算机CPU是32位或者64位,主要指的就是内存编号的宽度,而不是寄存器的宽度。计算机内存的每一个字节会有一个编号,就是地址值。

三、寻址方式
寻址公式一:[立即数]     
        MOV EAX,DWORD PTR DS:[0x13FFC4] ;读取内存的值:
        MOV DWORD PTR DS:[0x13FFC4],eax ;MOV DWORD PTR DS:[0x13FFC4],eax
        LEA EAX,DWORD PTR DS:[0X13FFC4] ;获取内存编号:实际上就是0X13FFC4
寻址公式二:[reg]  reg代表寄存器 可以是8个通用寄存器中的任意一个
       同上,只是0x13FFC4 改成 寄存器;MOV EAX,DWORD PTR DS:[ECX]
寻址公式三:[reg+立即数] 
       MOV EAX,DWORD PTR DS:[ECX+4]
寻址公式四:[reg+reg*{1,2,4,8}] 
       MOV EDX,DWORD PTR DS:[EAX+ECX*4]
寻址公式五:[reg+reg*{1,2,4,8}+立即数] 
       MOV EDX,DWORD PTR DS:[EAX+ECX*4+4]

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值