首页
社区
课程
招聘
问一个简单问题,关于代码 test ecx, 1
2004-5-6 23:26 6540

问一个简单问题,关于代码 test ecx, 1

2004-5-6 23:26
6540
最近学习密码,在跟XOR32算法时遇到问题。代码是:
00403DF0  />PUSH ECX
00403DF1  |>PUSH EDX
00403DF2  |>POP ECX
00403DF3  |>MOV EDX,DWORD PTR DS:[EAX]   
00403DF5  |>XOR EAX,EAX                       --->清零
00403DF7  |>TEST ECX,1                        --->检查字符长度,并开始计算。
00403DFD  |>JE SHORT xor32cra.00403E03
00403DFF  |>XOR AX,WORD PTR DS:[EDX]
00403E02  |>INC EDX
00403E03  |>SHR ECX,1
00403E05  |>JECXZ SHORT xor32cra.00403E13
00403E07  |>/ROL EAX,5
00403E0A  |>|XOR AX,WORD PTR DS:[EDX]
00403E0D  |>|ADD EDX,2
00403E10  |>|DEC ECX
00403E11  |>\JNZ SHORT xor32cra.00403E07
00403E13  |>POP ECX
00403E14  \>RETN

本来我理解 TEST ECX,1 是当ECX=1时满足条件,但根据书上介绍及跟踪结果来看,当ECX是偶数是,下句跳,是奇数是不跳。
我的汇编知识不好,请哪位帮忙解释一下怎么是这样?

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞6
打赏
分享
最新回复 (5)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
云淡风蒺 2004-5-7 00:37
2
0
如果 ecx AND 0x00000001 = 0, z Flag = 1, 其他, z Flag = 0
雪    币: 291
活跃值: (400)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
草原猎豹 4 2004-5-7 00:44
3
0
应该是判断奇偶
雪    币: 280
活跃值: (281)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
lzqgj 6 2004-5-7 10:54
4
0
那TEST ECX,1的汇编含义是就是判断奇偶了?可以理解为AND ECX,1 ?
雪    币: 213
活跃值: (85)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
henryw 2004-5-7 13:57
5
0
and是要改变的。
雪    币: 295
活跃值: (501)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
fengxu 1 2004-5-7 14:45
6
0
最初由 henryw 发布
and是要改变的。


应该是test不改变寄存器,and是要改变的。
两个命令都影响flag.
游客
登录 | 注册 方可回帖
返回