经典定长指令-修改EIP
1、0x70~0x7F
- EIP无法像通用寄存器那样用mov来修改,只能通过类似于jz,JNB,JNE JBE,call等的跳转指令来进行修改
- 条件跳转,后跟一个字节立即数的偏移(有符号),共两个字节。
- 如果条件成立,跳转到当前指令地址+当前指令长度+Ib
- 最大值:向前跳转7F,向后跳80
0x80 JO 0x81 JNO 0x82 JB/JNA/JC 0x83 JNB/JAE/JNC 0x84 JZ/JE 0x85 JNZ/JNE 0x86 JBE/JNA 0x87 JNBE/JA 0x88 JS 0x89 JNS 0x8A JP/JEP 0x8B JNP/JPO 0x8C JL/JNGE 0x8D JNL/JGE 0x8E JLE/JNG 0x8F JNLE/JG

二、0x0F 0x80 -0x0F 0x8F
- 条件跳转,后跟四个字节立即数的便宜(有符号),共五个字节
- 如果条件成立,跳转到 当前指令地址+当前指令长度+Id
- 最大值:向前跳7FFFFFFF,向后跳80000000
0x0F 0x80 JO 0X0F 0X81 JNO 0X0F 0X82 JB/JNAE/JC 0X0F 0X83 JNB/JAE/JNC 0X0F 0X84 JZ/JE 0X0F 0X85 JNZ/JNE 0X0F 0X86 JBE/JNA 0X0F 0X87 JNAE/JA 0X0F 0X88 JS 0X0F 0X89 JNS 0X0F 0X8A JP/JPE 0X0F 0X8B JNP/JPO 0X0F 0X8C JL/JNGE 0X0F 0X8D JNL/JGE 0X0F 0X8E JLE/JNG 0X0F 0X8F JNLE/JG
三、其他指令
0XE0 LOOPNE/LOOPNZ Ib(Jb) 共2字节 ECX=ECX-1当ZF=0&&ECX!=0时跳转到 当前指令地址+当前指令长度+Ib


指令包含一个要添加到指令指针寄存器的相对偏移量(例如,JMP (0 e9),循环)。

立即数

一个字节

双字,不管操作数大小属性如何
0XE1 LOOPE/LOOPZ Ib(Jb) 共2字节
ECX=ECX-1当ZF=1&&ECX!=0时跳转到 当前指令地址+当前指令长度+Ib
0xE2 LOOP Ib(Jb) 共2字节
ECX=ECX-1当ECX!=0时跳转到 当前指令地址+当前指令长度+Ib
0XE3 JrCXZ Ib(Jb)(在32位模式中,rCX为ECX) 共2字节 当ECX=0时跳转到当前指令地址+当前指令长度+Ib (自己控制步长)
0xE8 CALL Id(Jd) 共5字节 CALL指令的下一条指令地址入栈后,跳转到 当前指令地址+当前指令长度+Id
0xE9 JMP Id(Jd) 共5字节 跳转到 当前指令地址+当前指令长度+Id



浙公网安备 33010602011771号