【逆向】x86汇编串操作指令集合
重复前缀
REP //CX != 0,重复执行字符串指令
REPZ / REPE //CX != 0,且ZF=1,相同时,重复执行字符串指令
REPNZ / REPNE //CX != 0,且ZF=0,不同时,重复执行字符串指令
方向标志位
CLD //置DF=0,EDI ++
STD //置DF=1,EDI - -
字符串拷贝
1、MOVS / MOVSB / MOVSW / MOVSD
1 //从ESI拷贝数据到EDI缓冲区 2 00404830 > 8D35 00904000 lea esi,dword ptr ds:[0x409000] 3 00404836 8D35 10904000 lea esi,dword ptr ds:[0x409010] 4 0040483C FC cld 5 0040483D B9 08000000 mov ecx,0x8 6 00404842 F3:A4 rep movs byte ptr es:[edi],byte ptr ds:[esi]
字符串比较
1、CMPS / CMPSB / CMPSW / CMPSD
1 //比较ESI,EDI缓冲区内容是否相同 2 00404830 > 8D35 00904000 lea esi,dword ptr ds:[0x409000] 3 00404836 8D3D 10904000 lea edi,dword ptr ds:[0x409010] 4 0040483C FC cld 5 0040483D B9 04000000 mov ecx,0x8 6 00404842 F3:A6 repe cmps byte ptr es:[edi],byte ptr ds:[esi] 7 00404844 85C9 test ecx,ecx
字符串搜索
1、SCAS / SCASB / SCASW / SCASD
1 //搜索EDI缓冲区是否包含“0x55” 2 00404830 > 8D3D 00904000 lea edi,dword ptr ds:[0x409000] 3 00404836 66:B8 5500 mov ax,0x55 4 0040483A FC cld 5 0040483B B9 08000000 mov ecx,0x8 6 00404840 F2:AE repne scas byte ptr es:[edi]
字符串长度
1、SCAS / SCASB / SCASW / SCASD
1 //获取EDI缓冲区,以0结尾的字符串长度(包含结尾字符“0”) 2 00404830 > 8D3D 00904000 lea edi,dword ptr ds:[0x409000] 3 00404836 B9 FFFFFFFF mov ecx,-0x1 4 0040483B 33C0 xor eax,eax 5 0040483D FC cld 6 0040483E F2:AE repne scas byte ptr es:[edi] 7 00404840 F7D1 not ecx
字符串初始化
1、STOS / STOSB / STOSW / STOSD
1 //初始化EDI缓冲区 2 00404830 > 8D3D 00904000 lea edi,dword ptr ds:[0x409000] 3 00404836 FC cld 4 00404837 33C0 xor eax,eax 5 00404839 B9 08000000 mov ecx,0x8 6 0040483E F3:AA rep stos byte ptr es:[edi]
...