【逆向】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]

...

posted @ 2020-02-17 00:33  SunsetR  阅读(542)  评论(0编辑  收藏  举报