首页
社区
课程
招聘
检测位指令TEST的用法
发表于: 2006-6-1 09:43 9783

检测位指令TEST的用法

2006-6-1 09:43
9783

我知道TEST是检测位指令的,但它是怎么影响标志位的呢,看了一些资料但还是不明白
假如我用了test ax,11111111b后, 标志位会是什么样子的
我反汇编一些程序,老是见有如下命令行,很不理解,大家给解释下
0043CA56   .  85C0          TEST EAX,EAX
0043CA58   .  0F85 9F000000 JNZ L2Wind1.0043CAFD


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (8)
雪    币: 517
活跃值: (35)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
TEST EAX,EAX=eax and eax

也就是test 是执行与运算
2006-6-1 09:46
1
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
0043CA56   .  85C0          TEST EAX,EAX
还是这个命令,假如EAX=0000000, 那么执行后标志寄存器各位都是什么

如果EAX=11111111, 结果是什么

如果是10101010, 结果又是什么呢
我对这个命令很糊涂,麻烦有过路的高手给解释下,谢了
2006-6-1 11:08
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
4
TEST - Test For Bit Pattern
//位测试指令
        Usage:  TEST    dest,src
//用法:TEST dest,src
        Modifies flags: CF OF PF SF ZF (AF undefined)
//受影响的标志位有:
//你要注意的是这一部位才对。你上面的指令test eax,eax后面跟着的是jnz指令,jnz指令作用于零标志位的,若零标志位不为零则跳,所以test eax,eax是测试eax是否为零的指令,若eax有数据,不管是什么数据(111也好,101也好),jnz都会跳。
//更新一下,若eax有数据,不管是111也好,222也好,只要他们两个操作数作逻辑与运算之后,结果不为零,则jnz都会跳。而jz则不跳。

CF //进位标志,主要作用于JC/JNC指令。
OF //溢出标志,主要作用于JO/JNO指令
PF //奇偶标志,主要作用于JP/JPE/JNP/JPO指令
SF //符号标志,主要作用于JS/JNS指令
ZF //零标志,主要作用于JZ/JE/JNZ/JNE指令
AF //辅助进位标志,不过未定义。
        Performs a logical AND of the two operands updating the flags
//执行两个操作数的逻辑与运算,并更新标志位。
        register without saving the result.
//该操作只修改标志位,不保留运算结果值。
2006-6-1 11:15
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
最初由 小虾 发布
TEST - Test For Bit Pattern
//位测试指令
Usage: TEST dest,src
//用法:TEST dest,src
Modifies flags: CF OF PF SF ZF (AF undefined)
........


解释的非常详细和准确! 敬礼!!
2006-6-1 12:00
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
本人新来贵版,每天限帖5个,因问题居多,所以对帮助偶的各位大狭不另外发贴感谢了,但我从内心里谢谢你们,我爱你们,我爱看雪

今天破解遇到一个很困惑的问题,如下:
地址       HEX数据       反汇编                        注释
0043CA78 . 66:C745 E4 00 MOV WORD PTR SS:[EBP-1C],0
0043CA7E . EB 0B         JMP SHORT L2Wind1.0043CA8B ;  往下跳2行
0043CA80 . 66:C745 E4 10 MOV WORD PTR SS:[EBP-1C],10;  好象不运行呀
0043CA86 . E8 4F2E3700   CALL L2Wind1.007AF8DA      ;  好象不运行呀
0043CA8B > 66:C745 E4 14 MOV WORD PTR SS:[EBP-1C],14
0043CA91 . 8B45 CC       MOV EAX,DWORD PTR SS:[EBP-34]
0043CA94 . 50            PUSH EAX
0043CA95 . 8B10          MOV EDX,DWORD PTR DS:[EAX]
0043CA97 . FF12          CALL DWORD PTR DS:[EDX]
0043CA99 . 59            POP ECX
0043CA9A . 66:C745 E4 00 MOV WORD PTR SS:[EBP-1C],0
0043CAA0 . EB 0B         JMP SHORT L2Wind1.0043CAAD  ;往下跳2行
0043CAA2 . 66:C745 E4 1C MOV WORD PTR SS:[EBP-1C],1C ;  好象不运行呀
0043CAA8 . E8 2D2E3700   CALL L2Wind1.007AF8DA    ;  好象不运行呀
0043CAAD > 66:C745 E4 20 MOV WORD PTR SS:[EBP-1C],20

大家看下上面的代码(OLLYDBG), 我备注"好象不运行呀"的地方, 我怎么看好象都不可能运行的. 我直接反汇编,只加了些中断,还没改任何东西.
这是怎么回事,大家帮忙给点建议
2006-6-1 17:14
0
雪    币: 200
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
7
小虾,真棒 学习中
2006-6-5 18:19
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
可以由?的地方直接咄入
0043CA80 或 0043CAA2 呀
2006-6-5 18:48
0
雪    币: 50
活跃值: (145)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
9
想看看从那来的,就点住那一行,看红线是从哪里跳过来的
2006-6-5 19:19
0
游客
登录 | 注册 方可回帖
返回
//