字符串比较函数末尾的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.
比较常见的代码,对初学者很有用 谢谢楼主分享, 谢谢分享
页:
[1]