滴水逆向

exe文件头 4D 5A 90 00 03

逆向过程:二进制>>>汇编>>>C程序

常用计量单位:

​ byte 字节 = 8(bit)

​ word 字 = 16(bit)

​ dword 双字 = 32(bit)

内存读写

寄存器:

​ 32位:EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI

​ 16位:AZ、CX、DX、BX、SP、BP、SI、DI

​ 8位:AL、CL、DL、BL、AH、CH、DH、BH

DS:数

SS:ESP、EBP

ES:EDI

指令:

mov 存放

add 添加

sub 减少

lea 取编号

push 入栈

pop 取栈值

lea 获取内存编号

rep 重复

pushad 8个寄存器保存堆栈

popad 恢复寄存器

xchg 交换数据

sbb 带借位减法

movs 移动数据。内存-内存

stos 将AL/AX/EAX的值存储到[EDI]指定的内存单元

rep 按计数寄存器(ecx)中指定的次数重复执行字符串指令

jmp 修改eip

EFLAGS寄存器

image-20211006094502393

JCC

jmp 寄存器/立即数 #只修改eip

call 寄存器/立即数 #修改eip,往栈加入值

retn #返回

cmp cmp eax,ecx #比较两个操作数,不修改操作数的值只修改标志位

test test eax,eax #两个数值比较结果不保存,只需改标志位

je、jz #结果为零则跳转(相等时跳转) ZF=1

jne、jnz #结果不为零则跳转(不想等时跳转) ZF=0

js #结果为负则跳转 SF=1

jns #结果为非负则跳转 SF=0

jp、jpe #结果中1的个数为偶数则跳转 PF=1

inp、ipo #结果中1的个数为奇数则跳转 PF=0

jo #结果溢出了则跳转 OF=1

jno #结果没有溢出则跳转 OF=0

jb、jnae #小于则跳转(无符号数) CF=1

JNB、JAE #大于则跳转(无符号数) CF=0

JBE、JNA #小于则跳转(无符号数) CF=1 or ZF=1

JNBE,JA #大于则跳转(无符号数) CF=0 or ZF=0

JL、JNGE #小于则跳转(有符号数) SF != OF

JNL、JGE #大于等于则跳转(有符号数) SF=OF

JLE、JNG #小于等于则跳转(有符号数) ZF=1 or SF != OF

JNLE,JG #大于则跳转(有符号数) ZF=0 and SF=OF

C语言

posted @ 2022-06-09 15:51  Rlins  阅读(112)  评论(0)    收藏  举报