汇编语言求字符串长度,逆向中经常会出现,标记一下:
; scas(说明是32位处理器)
;求字符串长度,结果存放在 eax 中
mov edx,edi
mov edi,eax
mov ecx,-0x1 ; 将ecx 赋值为FFFFFFFF
xor al,al
repne scas byte ptr es:[edi] ;使用 es:[edi] 中的内容与 al 相比,不等于就一直比下去。比较一次后 edi 加一。
mov eax,-0x2 ;将 eax 赋值为FFFFFFFE; ecx 多减了一次(结尾的 0),所以这里eax 比 ecx原始值小1
sub eax,ecx ; 求出字符串长度,结果存放在 eax 中
mov edi,edx
retn