lea esi, [ebp + asciiz] ;6 bytes
s_check: lodsb ;1 byte
test al, al ;2 bytes
jne s_check ;2 bytes
小弟再看程序优化时看到上面的代码,有些不解,请各位指点。
上面的指令说是运行后 到达字符串尾。
但我这样子理解,lea esi, [ebp + asciiz] 赋值。
lodsb ,将源串中的元素逐一装入AL或AX中。
假设esi指向数据是-》12345678,那么第一个lodsb将1给al,接着test仅修改标志位。
因为al和al都是一样的所以不会改变,应该不等于零,会跳转。
但问题是当执行倒最后了al值为8再test的话还是应该等于0的,也就是说test后的结果都为0,程序进入死循环……,不懂请各位指点。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课