逆向之汇编

一、汇编

  1. 在计算机中,正数原码存,负数补码存
  2. 与运算,串联。或运算,并联。异或运算,不一样的为1比如
    在这里插入图片描述左移,二进制向左移位,高位丢弃,低位补零。右移,(shr,向右移,低位丢弃,高位补零。sar,向右移,低位丢弃,高位补符号位)
  3. 加法流程: 异或,判断进位(如果不为零),继续左移然后异或,判断是否有进位。
    在这里插入图片描述
  4. (32位)通用寄存器:EAX, ECX ,EDX,EBX,ESP,EBP,ESI,EDI.16位AX,CX,BX,DX,BP,SP,SI,DI.8位AL,AH,BL,BH,CH,CL,DH,DL
  5. 内存的5种地址形式:[立即数],[reg(8个32位通用寄存器之一)],[reg+立即数],[reg+reg*{1,2,4,8}],[reg+reg*{1,2,4,8}+立即数]
  6. 存储模式,大端模式:数据高位在低位,低位在高位,小端模式:数据低位在低位,高位在高位 ,x86一般采用小端存储,ARM一般 采用大端模式
  7. 汇编指令
//r  通用寄存器
//m 内存
// imm 立即数
// r8 8位通用寄存器
//m8 8位内存
// imm 8位立即数
MOV {r8,r16,r32,m8,m16,m32},{r8,r16,r32,m8,m16,m32,imm8,imm16,imm32}
mov不能同时为m

ADD {r8,r16,r32,m8,m16,m32},{r8,r16,r32,m8,m16,m32,imm8,imm16,imm32}

SUB {r8,r16,r32,m8,m16,m32},{r8,r16,r32,m8,m16,m32,imm8,imm16,imm32}

AND {r8,r16,r32,m8,m16,m32},{r8,r16,r32,m8,m16,m32,imm8,imm16,imm32}

OR {r8,r16,r32,m8,m16,m32},{r8,r16,r32,m8,m16,m32,imm8,imm16,imm32}

XOR {r8,r16,r32,m8,m16,m32},{r8,r16,r32,m8,m16,m32,imm8,imm16,imm32}

NOT {r8,r16,r32,m8,m16,m32}


MOVS 内存到内存
MOVSB MOVSW MOVSD
MOVSB PTR ES:[EDI],PTR DS[ESI]
MOVSD PTR ES:[EDI],PTR DS[ESI]
MOVSW PTR ES:[EDI],PTR DS[ESI]

STOS  将al、ax、eax的值放到[EDI]指定位置
STOSB STOSD STOSW
STOS PTR ES:[EDI]

REP:桉计数寄存器(ECX)中指定的次数重复执行字符串指令
PUSH ESP-{4,2}
PUSH{R16,R32,Imm16,Imm32,imm8,m16,m32}
POP ESP+{4,2}
POP{R16,R32,M32,M16}

JMP call 修改EIP
JMP m/imm/reg 32位 reg->EIP
CALL m/imm/reg 32位 下一条指令压栈 reg->EIP
ret :ESP地址+4,[ESP] ->EIP

对内存进行读取时一定要注意声明数据宽度

8.堆栈平衡:如果返回父程序,则当我们在堆栈中进行堆栈操作时,保证在这条指令之前,esp指向的是我们压入栈中的地址;如果通过堆栈传递参数了,在函数执行完毕后,要平衡参数导致的堆栈变化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值