strcpy---アセンブリのプロセス
4305 ワード
strcpyでアセンブリするプロセス
00401191 mov edi,dword ptr ss:[esp+0x8] ; buffer
00401195 jmp short test.00401201
...
00401201 mov ecx,dword ptr ss:[esp+0xC] ; cpy
00401205 test ecx,0x3 ; cpy
0040120B je short test.00401226
...
00401226 mov edx,0x7EFEFEFF
0040122B mov eax,dword ptr ds:[ecx] ; eax buffer
0040122D add edx,eax ; eax+7EFEFEFF
0040122F xor eax,-0x1 ; eax
00401232 xor eax,edx ; eax xor (7EFEFEFF+eax)
00401234 mov edx,dword ptr ds:[ecx] ; buffer
00401236 add ecx,0x4 ; ecx-->buffer+4
00401239 test eax,0x81010100 ; ** **
0040123E je short test.00401221
00401240 test dl,dl
00401242 je short test.00401278 ; 00
00401244 test dh,dh
00401246 je short test.0040126F ; 00
00401248 test edx,0xFF0000
0040124E je short test.00401262 ; 00
00401250 test edx,0xFF000000
00401256 je short test.0040125A ; 00
00401258 jmp short test.00401221
0040125A mov dword ptr ds:[edi],edx
0040125C mov eax,dword ptr ss:[esp+0x8]
00401260 pop edi ; 0012FB20
00401261 retn
00401262 mov word ptr ds:[edi],dx
00401265 mov eax,dword ptr ss:[esp+0x8]
00401269 mov byte ptr ds:[edi+0x2],0x0
0040126D pop edi ; 0012FB20
0040126E retn
0040126F mov word ptr ds:[edi],dx
00401272 mov eax,dword ptr ss:[esp+0x8]
00401276 pop edi ; 0012FB20
00401277 retn
00401278 mov byte ptr ds:[edi],dl
0040127A mov eax,dword ptr ss:[esp+0x8]
0040127E pop edi ; 0012FB20
0040127F retn
注記:0 x 81010100と同様にしたり演算したりして、変更配列に00が存在すると判断し、それぞれ4つのケースがある