x86/x64汇编基础15.汇编基础11:控制转移指令

笔记

学习最新前沿软件逆向安全技术、游戏安全辅助脚本技术,B 站 小迪 xiaodi 老师

微信 i-xiaodi

控制转移指令

用于改变程序的执行流程。

操作符

功能

示例

jmp

无条件跳转

jmp 0x00401000

call

调用子程序

call 0x00401000

ret

返回到调用点

ret

je/jz

如果相等(Zero flag置位)跳转

je 0x00401020

jne/jnz

如果不等(Zero flag未置位)跳转

jne 0x00401020

jg

如果大于跳转

jg 0x00401020

jl

如果小于跳转

jl 0x00401020

jge

如果大于等于跳转

jge 0x00401020

jle

如果小于等于跳转

jle 0x00401020

loop

循环跳转

loop 0x00401020

int

调用中断

int 0x80

iret

从中断返回

iret

重点

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指令会影响以下标志寄存器中的位:

  1. CF (Carry Flag)
    • 设置条件:发生借位(即无符号比较时,第一个操作数小于第二个操作数)。
    • 清除条件:未发生借位。
  1. ZF (Zero Flag)
    • 设置条件:两个操作数相等(即结果为零)。
    • 清除条件:两个操作数不相等。
  1. SF (Sign Flag)
    • 设置条件:结果为负(即最高有效位为1,符号位为1)。
    • 清除条件:结果为正或零(符号位为0)。
  1. OF (Overflow Flag)
    • 设置条件:有符号比较时发生溢出(即正数减负数得到负数,或负数减正数得到正数)。
    • 清除条件:未发生溢出。
  1. PF (Parity Flag)
    • 设置条件:结果的最低字节中,1的位数为偶数。
    • 清除条件:结果的最低字节中,1的位数为奇数。
  1. AF (Auxiliary Carry Flag)
    • 设置条件:在低4位操作中发生借位。
    • 清除条件:未发生借位。
    • 注意AF通常在CMP指令中用得较少。

总结:CMP指令影响的标志寄存器有 CF、ZF、SF、OF、PF、AF

 

请登录后发表评论