女萝岩 发表于 2020-3-18 23:29

字符串比较函数末尾的neg sbb inc 指令

本帖最后由 女萝岩 于 2020-3-18 23:38 编辑

在ida中看到一段代码,是比较字符串相等的。
push dword ptr
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>0neg eax 置cf为1,当eax<0时,neg eax 置cf为1,当eax==0时,neg eax置cf为0

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















shj2k 发表于 2020-3-21 14:23

比较常见的代码,对初学者很有用

Aa654057112 发表于 2020-3-22 15:26

谢谢楼主分享,

libaogui2022 发表于 2022-12-18 13:20

谢谢分享
页: [1]
查看完整版本: 字符串比较函数末尾的neg sbb inc 指令