首页
社区
课程
招聘
[求助]test eax, eax; ja跳转连用问题
2009-3-3 11:49 6054

[求助]test eax, eax; ja跳转连用问题

2009-3-3 11:49
6054
前些时间在论坛上看到一个牛牛写得,关于
TEST   cx,cx
JG   short XXXXX
的问题,最后讨论结果是,如果cx>0则跳转到xxxxx所指,否则,继续向下执行。

当时不以为然,没想到日后碰到了下面的问题:
10093056    85C0            test    eax, eax
10093058    77 11           ja      short 1009306B
请问大家,这样连用的大概意思是什么呢?谢谢

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞7
打赏
分享
最新回复 (4)
雪    币: 232
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
maccoray 2 2009-3-3 12:15
2
0
是否是有符号数>0的判断呢?
其实这样很矛盾的就是上面jg那个,cx如果是无符号数,那么jg这个是必须跳转。
因为无符号数常>=0;

其实是一个语法问题,如果高手看到,确定一下这几句汇编的意思就好了。不用深究原理,因为死记硬背不一定是件不好的事情。我想确定自己死记硬背的东西是否是正确的,所以谢谢高手“确认”。
雪    币: 2108
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
书呆彭 6 2009-3-3 15:04
3
0
1.test指令做“逻辑and”运算。

2.“and运算”对标志位的影响是:清除OF与CF,根据运算结果设置其它标志——SF,ZF,PF

3.ja指令判断CF与ZF标志,如果CF=0并且ZF=0则跳转

综上,test eax,eax/ja xxxx的指令组合完成的功能是:“如果eax等于0就跳转”。

即就是,ja在test后面等价于jz。
雪    币: 2108
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
书呆彭 6 2009-3-3 16:31
4
0
说错了。

改正:

test eax,eax/ja xxxx的指令组合完成的功能是:“如果eax不等于0(此时ZF=0)就跳转”。

即就是,ja在test后面等价于jnz。

感谢thinkSJ指出错误来。其实直接跟帖说明即可。
雪    币: 232
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
maccoray 2 2009-3-5 18:21
5
0
呵呵……感谢彭先生这么关照我,感激涕零。结贴。
游客
登录 | 注册 方可回帖
返回