逆向 —— JCC

JMP指令:修改EIP的值

MOV EIP,寄存器/立即数   简写为   JMP 寄存器/立即数

CALL指令:

PUSH 地址B

MOV EIP,地址A/寄存器

简写为:CALL 地址A/寄存器

RET指令:

LEA ESP,[ESP+4]

MOV EIP,[ESP-4]

简写为:RET

CMP指令:

指令格式:CMP  R/M,R/M/IMM

该指令是比较两个操作数,实际上,它相当于SUB指令,但是相减的结构并不保存到第一个操作数中。只是根据相减的结果来改变零标志位的,当两个操作数相等的时候,零标志位置1。

MOV EAX,100

MOV ECX,100

CMP EAX,ECX

观察Z位

MOV EAX,100

MOV ECX,200

CMP EAX,ECX

观察S位

CMP AX,WORD PTR DS:[405000]

CMP AL,BYTE PTR DS:[405000]

CMP EAX,DWORD PTR DS:[405000]

TEST指令:

指令格式:TEST  R/M,R/M/IMM

该指令在一定程序上和CMP指令时类似的,两个数值进行与操作,结果不保存,但是会改变相应标志位.

与的操作表项如下:

1 and 1 = 1

1 and 0 = 0

0 and 1 = 0

0 and 0 = 0

常见用法:用这个指令,可以确定某寄存器是否等于0。

TEST EAX,EAX

观察Z位

但是如果EAX的二进制某些位为1的话,那么运算的结果就不为零。

 

 有符号无符号的区别:

CMP AL,CL

JG 0x12345678

JA 0x12345678

1、CALL执行时堆栈有什么变化?EIP有变化吗?

堆栈PUSH当前地址,EIP变为所跳的地址

2、RET执行时堆栈有什么变化?EIP有变化吗?

堆栈POP地址,EIP变为所POP得地址

3、使用汇编指令修改标志寄存器中的某个位的值,实现JCC的十六种跳转.

不允许在OD中通过双击的形式修改标志寄存器.

要通过汇编指令的执行去影响标志位,能用CMP和TEST实现的优先考虑.

posted @ 2023-02-17 20:13  Mast丶轩  阅读(191)  评论(0)    收藏  举报