14.x86游戏实战-汇编指令cmp test

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

本次游戏没法给

内容参考于:微尘网络安全

工具下载:

链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3

提取码:6tw3

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:13.x86游戏实战-汇编指令neg shr shl sar

test、cmp一般用来作比较

test它与and的功能一样,也就是一个与运算,但是它不会改变操作数(test eax, 2,这里的eax位置就是操作数)的内容,test会改变eflags寄存器的内容

cmp与sub的功能一样,也就是一个减运算,它也不会改变操作数的内容(不会把结果放到操作数里),它也只会改变eflags寄存器的内容

eflags寄存器

它是标志寄存器,理论上它里面每一位都代表了一个东西(为什么说理论上,因为eflags寄存器有一些位目前是没有任何意义没有任何用的),如下图efalgs寄存器用到的每一位所代表的东西,记不住没关系,后面用到了会有非常详细保姆级的说明,现在完全不需要记不需要理解,现在只要知道有这么回事就行

跳转指令:跳不跳转取决于eflags寄存器里的值

JE   ;等于则跳转
JNE  ;不等于则跳转

JZ   ;为 0 则跳转
JNZ  ;不为 0 则跳转

JS   ;为负则跳转
JNS  ;不为负则跳转

JC   ;进位则跳转
JNC  ;不进位则跳转

JO   ;溢出则跳转
JNO  ;不溢出则跳转

JA   ;无符号大于则跳转
JNA  ;无符号不大于则跳转
JAE  ;无符号大于等于则跳转
JNAE ;无符号不大于等于则跳转

JG   ;有符号大于则跳转
JNG  ;有符号不大于则跳转
JGE  ;有符号大于等于则跳转
JNGE ;有符号不大于等于则跳转

JB   ;无符号小于则跳转
JNB  ;无符号不小于则跳转
JBE  ;无符号小于等于则跳转
JNBE ;无符号不小于等于则跳转

JL   ;有符号小于则跳转
JNL  ;有符号不小于则跳转
JLE  ;有符号小于等于则跳转
JNLE ;有符号不小于等于则跳转

JP   ;奇偶位置位则跳转
JNP  ;奇偶位清除则跳转
JPE  ;奇偶位相等则跳转
JPO  ;奇偶位不等则跳转

test指令

一般与跳转指令一起使用,就是用来做判断,如果比如1大于2就跳转到某某函数、某某地址,test会改变eflags寄存器的值,这并没有什么用,有用的是跳转指令,跳转指令会根据eflags寄存器的值来决定跳不跳转

test指令一般会如下图中的例子来使用,一般跟在调用完函数的下一句,用来判断函数返回值是不是0,如果是0一般说明返回值有问题(具体要根据实际情况分析,后面遇到了会详细写),然后如下图eax的值是1,然后test是一个与操作,所以eflags寄存器不会是0,所以jnz会跳转

执行结果

不跳转的例子,也就是与完的结果是0

cmp

上方说test一般用来判断返回值是否存在(返回值是否是0),cmp就是用来做大小比较的,如下图eax的值是0,ecx的值是2,eax比ecx小

然后执行jle指令就会跳转,所以至于是做大于判断还是小于判断,取决于cmp后面跟着的是什么跳转指令


相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-09 20:48:07       50 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-09 20:48:07       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-09 20:48:07       43 阅读
  4. Python语言-面向对象

    2024-07-09 20:48:07       54 阅读

热门阅读

  1. 从零开始!Jupyter Notebook的安装详细教程

    2024-07-09 20:48:07       42 阅读
  2. MySQL篇五:基本查询

    2024-07-09 20:48:07       19 阅读
  3. 深入Django(七)

    2024-07-09 20:48:07       23 阅读
  4. 【LeetCode】赎金信

    2024-07-09 20:48:07       22 阅读
  5. Pip换源,以及python解耦方法实现

    2024-07-09 20:48:07       22 阅读
  6. qt 线程举例

    2024-07-09 20:48:07       22 阅读