不用strlen获取字符串长度的汇编指令

在做逆向工作时发现一段奇怪的汇编指令:

lea edi,ebp+0x10;
or ecx, 0xFFFFFFFF;
xor eax, eax;
repne scasb;
not ecx;
dec ecx;
首先edi存储了一个C风格字符串的首地址

      ecx=0xFFFFFFFF

      eax=0

      repne scasb;   not ecx;  dec ecx;指令运行完之后,ecx存储了该C风格字符串的长度。

实际情况看下面这张图:


not ecx指令执行后,这时的ecx值是字符串长度+字符串结束标志长度1

在这之后也会常跟上一个指令sub edi ecx,让edi重新指向字符创起始位置


展开阅读全文

没有更多推荐了,返回首页