汇编 eax test jnz jz 等组合连用的总结
目录
- 结论
- 举例分析
- test作用
- ZF PF标志位改变不需要记,因为不方便记忆.
- 我们需要记住是test下面语句的跳转语句意思
- jnz
- jz
- 总结
结论
这几个组合在一起通常是判断 函数返回结果是否是0.是0跳转到哪里,不是0跳转到哪里
举例分析
下面代码:就是判断2个字符串是否相等.
push edx
push eax
call dword ptr dS:[K&KERNEL32.1strcmpA> //判断edx和 eax 2个字符串是否相等,调用的是C语言的 strcmp
test eax,eax
push 0
JnZ Short Crackhe. 00401 0E8
上面代码call的是C语言的 strcmp ,这个函数比较2个字符串是否相等,如果相等,返回0,否则返回1, 返回的参数存入到eax里面.
然后如果用高级语言,想实现判断返回值是否等于0,如下
if (eax == 0){跳转到一个地方
}else{跳转到一个地方
}
在汇编中这么做判断eax是否等于0
test eax,eax
test作用
test作用是逻辑与,逻辑与就是2个数字相同是1,否则是0.按位逻辑与,就是每一位二进制进行逻辑与
例如 :如果是 0111和 0001按位逻辑与结果是0001,因为只有最后一位全是1,其他都是0
eax如果是二进制数 0101的话, 0101按位逻辑与还等于0101.
例如 test eax, eax 就是 让eax 和 自己逻辑与,按位逻辑与的话,eax和eax是相同的,所以,只有eax是0的时候才会是0,否则 结果就是eax本身.
但是test的作用,并不会改变后面的寄存器eax,改变的是标志位.
ZF PF标志位改变不需要记,因为不方便记忆.
这里改变了ZF标志,变成了0,
PF标志,这里不进行讲解,因为记忆标志位不方便理解.想要知道具体的可以自己查询.
需要联合记忆.
我们需要记住是test下面语句的跳转语句意思
jnz
例如jnz,那么就是说不等于0的时候跳转n是not不,z是zero零.jnz检验的标志位就是zf,这个标志位通过test改变了zf,然后jnz进行跳转.当test比较的结果不等于0,就跳转
jz
test比较结果等于0才跳转.
例如 test eax,eax. 当eax等于0的时候. 0 按位逻辑与0的结果还是0, 那么 下面执行jz的时候就直接跳转了
总结
call 函数改变了eax
test eax,eax,判断eax是否等于0
jnz 判断如果不等于0跳转,相当于是用if else 判断是否等于0
下面截图是一段汇编指令,判断2个字符串是否相等的
汇编 eax test jnz jz 等组合连用的总结相关推荐
- 汇编 eax寄存器和AX,AH,AL之间的关系
EAX与AX不是独立的,EAX是32位的寄存器,而AX是EAX的低16位. 举例来说 mov eax, 12345678h 那么AX将会是eax的低16位,也就是5678h. 而如果此时 mov ax ...
- [转载]汇编eax寄存器和AX,AH,AL之间的关系
00000000 00000000 00000000 00000000 |=EAX=|-32个0,4个字节,2个字,1个双字 |AX=|-16个0,2个字节,1个字 |AH=|-----------8 ...
- 汇编中的BP与SS组合时,BP里面放的到底是SS中的一个基地址的指针还是基地址本身?
这个问题应该没有意义,是自己没搞清指针和地址的关系,两者没有差别吧.基地址的地址就是它的指针.
- 破解基础----背的滚瓜烂熟差不多就会破解
破解基础----背的滚瓜烂熟差不多就会破解 1)经典比较组合,常为注册码出现处(by programhunter) 1 mov eax [ ] 这里可以是地址,也可以是其它寄 ...
- 转:传说中破解基础----背的滚瓜烂熟差不多就会破解
1)经典比较组合,常为注册码出现处(by programhunter) 1 mov eax [ ] 这里可以是地址,也可以是其它寄存器 mov edx [ ] 同上 ...
- 免杀需要的基本汇编知识
搜集的资料感觉挺好用,不知道谁总结的感觉挺全的,作为参考 一.机械码,又称机器码 Ultraedit打开,编辑exe文件时你会看到许许多多的由0.1.2.3.4.5.6.7.8.9.A.B.C.D.E ...
- 【reverse】通俗易懂的gcc内联汇编入门+示例:实现花指令
文章目录 引言 依赖 Hello world Demo1:读取函数若干个字节的数据 效果 Demo2:基础的花指令 效果 如何去除花指令 参考资料 引言 基于Visual Studio的内联汇编教程已 ...
- X86汇编——简易通讯录
尚未解决:输入的姓名.号码不能超过11位,否则将会覆盖到后面结构体分配的内存 头文件 include windows.inc include msvcrt.inc ;包含C语言的库 includeli ...
- 汇编——NT中读取MBR内容
;************************************************** ;ReadMBROnDiskNT.asm ;功能:Windows NT.2K.XP中读MBR ; ...
最新文章
- cmake 头文件 库文件 路径搜索 CMAKE_INCLUDE_PATH CMAKE_LIBRARY_PATH
- 深入浅出Node.js(一):什么是Node.js(转贴)
- 推荐经典算法实现之BPMF(pymc3+MovieLen)
- Vim不常见但是很实用的命令技巧
- JDK/Java 16 可能带来什么新特性?
- Eclipse C/C++开发环境搭建
- 小弟带你走进VUE中input最大值设置出现的问题以及黑科技解决方案
- matlab的一些关于块分类的函数~~~
- 模块目录下site.php,使用apache配置为每个站点指定PHP包含目录
- leetcode Course Schedule II
- xshell网站打不开
- 案例: 模拟京东快递单号查询
- 利用Latex在线表格绘制表格以及多行合并垂直居中
- 波长与颜色的对应关系之python实现
- android wifi智能硬件4g,智能硬件 篇五:把WiFi带在身上,告别宽带!华为随行WiFi2畅享版真实体验...
- Ps 初学者教程「61」如何在图片中创建霓虹灯效果?
- mysql字段掩码_access字段输入掩码之字符篇
- 锐龙r5 6600u和r5 5600u区别 r56600u和r55600u对比
- 高校聘请13名韩国博士引争议,寒暑假完成博士课程,2.5年拿到证书
- 推荐系统_(一)算法详解