欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-23 22:10:52
...

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

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风格字符串的长度。

实际情况看下面这张图:

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


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

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