repe cmpsb指令解析

本文介绍了repe cmpsb指令在字符串比较中的工作原理。通过配合使用repe前缀和cmpsb指令,可以逐字节比较两个内存地址中的数据,当字节不相等或计数器CX变为0时停止比较。在密码验证场景中,这个指令可能存在的安全性问题也进行了讨论,提醒注意CX寄存器的初始值设定以避免不预期的匹配情况。
摘要由CSDN通过智能技术生成
 repe是一个串操作前缀,它重复串操作指令,每重复一次ECX的值就减一
一直到CX为0或ZF为0时停止。

cmpsb是字符串比较指令,把ESI指向的数据与EDI指向的数一个一个的进行比较。

当repe cmpsb配合使用时就是字符串比较啦,当相同时继续比较,不同时不比较


mov edi,[ebp+08] 将你输入的密码的地址付给EDI
mov esi,[ebp+0c] 真正的地址付给ESI
mov ecx,[ebp+10] 将他们的长度附给ECX
repe cmpsb 进行比较
jecxz 00401260 如果CX等于0,即密码正确跳
mov eax,00 密码不正确时,会EAX为0


再补充一下吧:
cmpsb是将ESI指向的字节与EDI指向的字节进行减操作
如果两个字符相等,即ZF为1,当不相等时ZF为0


而REPE停止重复的条件是ZF为0或CX为0,说明啦,当ZF为0时
肯定就是字串不同啦,当CX为0时,表明字符串比对成功没有出现
不相等的情况。

不过我觉得这样比不太好,如果你的密码打了8位
而真正的密码4位,如果ECX是4的话,他真会比对4位,正好你前4位
打对啦,那输入的密码也是正确的啦。如果他的ECX取得是你输入的密码
的个数,就没问题啦。不知道具体程序是什么样的,乱评一下,别介意。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值