문자열 비교 - disassemble
Posted 2007. 6. 13. 16:30, Filed under: Study/Computer Science00401090 /$ 8B4C24 04 MOV ECX,DWORD PTR SS:[ESP+4]
00401094 |. 53 PUSH EBX
00401095 |. 56 PUSH ESI
00401096 |. 8B7424 10 MOV ESI,DWORD PTR SS:[ESP+10]
0040109A |. 33C0 XOR EAX,EAX
0040109C |. 2BF1 SUB ESI,ECX ; esi : 비교하려는 두 문자열 사이의 메모리상의 거리
0040109E |> 8A11 /MOV DL,BYTE PTR DS:[ECX] ; ecx : index
--- 종료 조건 ---
004010A0 |. 84D2 |TEST DL,DL
004010A2 |. 75 06 |JNZ SHORT Strcmp.004010AA
004010A4 |. 803C0E 00 |CMP BYTE PTR DS:[ESI+ECX],0
004010A8 |. 74 17 |JE SHORT Strcmp.004010C1
--------------------
004010AA |> 8A1C0E |MOV BL,BYTE PTR DS:[ESI+ECX]
004010AD |. 3AD3 |CMP DL,BL ; 문자 비교
004010AF |. 7F 05 |JG SHORT Strcmp.004010B6
004010B1 |. 7C 0B |JL SHORT Strcmp.004010BE
004010B3 |. 41 |INC ECX ; 인덱스 증가
004010B4 |.^ EB E8 \JMP SHORT Strcmp.0040109E
004010B6 |> 5E POP ESI
004010B7 |. B8 01000000 MOV EAX,1
004010BC |. 5B POP EBX
004010BD |. C3 RETN
004010BE |> 83C8 FF OR EAX,FFFFFFFF
004010C1 |> 5E POP ESI
004010C2 |. 5B POP EBX
004010C3 \. C3 RETN
ecx : 비교하려는 문자열 중에 하나의 시작 주소를 저장
esi : 비교하려는 두 문자열의 주소값의 차이
이렇게 해놓고 ecx를 증가시키면서 [ecx], [ecx+esi] 의 값을 비교.
아스키 문자열 비교를 위해 DL 레지스터를 사용하여 하위 8비트 값만 사용.
---
악성 코드에서 문자열 비교 루틴을 많이 사용하길래
공부 삼아 한번 해봤는데..;
이건 뭐 구현 언어나 방법에 따라 그 때 그 때 다르니까 크게 소용이 없을 수도 있겠다 ;
언제쯤 제대로 한번 해볼라나 ㅋ