好友
阅读权限25
听众
最后登录1970-1-1
|
JCC
该部分内容围绕修改EIP 展开
JMP 的唯一作用就是修改EIP ,虽然其名称叫做无条件跳转指令 ,但是JMP 并不参与跳转,只会单纯地修改EIP ,跳转操作乃是是cpu 读取了EIP 的值后自动进行
Call 和ret 的作用也都是修改EIP ,并且有Call 必然就会有ret ,因为在执行Call 的同时会将下一条返回地址 压入当前栈顶 ,当Call 中的内容执行完后通过ret 返回。其返回地址的计算方法涉及硬编码知识
该部分内容围绕几个常用汇编指令展开
-
Cmp 指令格式:CMP R/M,R/M/IMM (注:两边不能同时为内存)
CMP 会比较两个操作时,实质乃是减法运算 ,相当于sub 指令,但是相减的结果并不保存到第一个操作数中,比如在Cmp EAX,ECX 运算中,实质是用EAX 的值减去ECX 的值
- 倘若两者相等,那么运算结果为
0 ,此时ZF零标志寄存器 被置为1
- 倘若
EAX 小于ECX ,那么此时ZF零标志位寄存器 为0 ,SF符号位标志寄存器 被置为1
- 倘若
EAX 大于ECX ,那么ZF和SF 两个标志寄存器都为0
-
TEST 指令格式:TEST R/M,R/M/IMM
- 该指令在一定程度上和
CMP 指令是类似的,两个数值进行与运算(and ),结果不保存,但会改变相应标志位ZF
- 常见用法:用
TEST 指令,可以判断某个寄存器是否为0 ,例如:TEST EAX,EAX ,若EAX 为0 ,那么ZF 将会被置为1
-
-
JE、JZ 的跳转条件:ZF 为1 时跳转(相等时跳转)
-
JNE、JNZ 的跳转条件:ZF 为0 时跳转(不相等时跳转)
-
JS 的跳转条件:SF 为1 时跳转(结果为负时跳转)
-
JNS 的跳转条件:SF 为0 时跳转(结果为非负时跳转)
-
JP,JPE 的跳转条件:PF 为1 时跳转(结果中的1为偶数时跳转)
-
JNP,JPO 的跳转条件:PF 为0 时跳转(结果中的1为偶数时跳转)
-
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 and ZF=0 则跳转(大于则跳转,注:特指无符号 数)
-
JL、JNGE 的跳转条件:SF ≠ OF 则跳转(小于则跳转,注:特指有符号 数)
-
JNL、JGE 的跳转条件:SF = OF 则跳转(大于等于则跳转,注:特指有符号 数)
-
JLE、JNG 的跳转条件:ZF=1 or SF≠OF 则跳转(小于等于则跳转,注:特指有符号 数)
-
JNLE、JG 的跳转条件:ZF=0 and SF=OF 则跳转(大于则跳转,注:特指有符号 数)
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|