瞄一眼

 找回密码
 立即注册
查看: 35|回复: 0

[32位汇编] 字符串比较函数末尾的neg sbb inc 指令

[复制链接]

320

主题

340

帖子

47

积分

管理员

Rank: 12Rank: 12Rank: 12

积分
47
发表于 2020-3-19 09:41:00 | 显示全部楼层 |阅读模式
IDA中看到一段代码,是比较字符串相等的。
push dword ptr[esp+4]
call CString:compare
neg   eax           
sbb     eax, eax
inc     eax
retn    4
看到这段代码我是蒙比的,每个字母都认识,连在一起却不知道什么意思,其实根本原因就是对neg sbb指令以及它们对标志位的影响不熟悉造成的。
查了下资料才搞懂了。
neg eax是得到eax的相反数,neg(5)=-5 ,neg(-5)=5,neg(0)=0,并且neg影响CF标志位,当eax>0  neg eax cf1,当eax<0时,neg eax cf1,eax==0时,neg eax  cf0

sbb  eax,eax
dst=eax-eax-CF
也就是说不管eax是正数还是负数
neg eax
sbb eax,eax之后eax的值都是-1,最后inc eaxeax0
eax0的时候
neg eax
sbb eaxeax
之后eax的值是0,最后inc eax eax1
最终实现了两个字符串不相等的时候返回0,相等的时候返回1.

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|瞄眼社区

GMT+8, 2020-4-3 00:46 , Processed in 0.243517 second(s), 28 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表