笔记
学习最新前沿软件逆向安全技术、游戏安全辅助脚本技术,B 站 小迪 xiaodi 老师
微信 i-xiaodi
控制转移指令
用于改变程序的执行流程。
操作符 |
功能 |
示例 |
|
无条件跳转 |
|
|
调用子程序 |
|
|
返回到调用点 |
|
|
如果相等(Zero flag置位)跳转 |
|
|
如果不等(Zero flag未置位)跳转 |
|
|
如果大于跳转 |
|
|
如果小于跳转 |
|
|
如果大于等于跳转 |
|
|
如果小于等于跳转 |
|
|
循环跳转 |
|
|
调用中断 |
|
|
从中断返回 |
|
重点
1.jmp 无条件跳转
2.call 的本质
1.push 返回的地址:实际上就是 call 执行完的下一行代码地址,或者说返回地址
2.进入到 call 的内部执行,相当于 jmp xxxx
3.执行完根据 push 的返回地址,返回到 call 下一行的执行代码(ret 起作用)
F7 可以步入到 call 子程序中
本质
jmp 46563D(子程序执行的地址)
push 返回的地址
ret 简单的相当于 jmp 到返回的地址
3.条件跳转
与 cmp 配合使用,记住几个单词的前缀即可
z:代表 zero,零
e:equal,相等
g:great,大
L:less,小
n:not,不
cmp 可能影响的标志位:
具体影响哪些,单步执行自己看一下即可
通常如下会受到影响
在x86架构下,CMP
(Compare)指令用于比较两个操作数的大小,其本质是对两个操作数进行减法运算(SUB
),但不会存储结果,只会根据结果更新标志寄存器(Flags Register)。
CMP
指令会影响以下标志寄存器中的位:
- CF (Carry Flag)
-
- 设置条件:发生借位(即无符号比较时,第一个操作数小于第二个操作数)。
- 清除条件:未发生借位。
- ZF (Zero Flag)
-
- 设置条件:两个操作数相等(即结果为零)。
- 清除条件:两个操作数不相等。
- SF (Sign Flag)
-
- 设置条件:结果为负(即最高有效位为1,符号位为1)。
- 清除条件:结果为正或零(符号位为0)。
- OF (Overflow Flag)
-
- 设置条件:有符号比较时发生溢出(即正数减负数得到负数,或负数减正数得到正数)。
- 清除条件:未发生溢出。
- PF (Parity Flag)
-
- 设置条件:结果的最低字节中,1的位数为偶数。
- 清除条件:结果的最低字节中,1的位数为奇数。
- AF (Auxiliary Carry Flag)
-
- 设置条件:在低4位操作中发生借位。
- 清除条件:未发生借位。
- 注意:
AF
通常在CMP
指令中用得较少。
总结:CMP
指令影响的标志寄存器有 CF、ZF、SF、OF、PF、AF。