티스토리 뷰
1. strcat 어셈블리 구현
|
[strcat 순서도]
|
[strcat 어셈블리 소스]
Strlen 함수를 이용하여 destStr, srcStr 문자열의 길이를 구한다.
[destStr 문자열의 시작주소] +[문자열의 길이] = [destrStr 마지막 주소] 를 구한 뒤 끝부분부터 strStr 문자열을 처음 값부터 차례대로 넣어주어 최종적으로 destStr문자열에 더해질 수 있다.
ECX값에 srcStr 문자열의 길이 값을 넣어주면 REP MOVS 명령어가 반복될 때마다 ECX는 자동으로 1씩 감소한다. 이 반복이 끝날 경우는 ECX가 0이 될 때까지 반복하기 때문에 정확히 srcStr문자길이만큼 반복하여 destStr문자열에 붙여 넣을 수 있게 된다.
|
2.1 strcat 동적 디버깅 분석 1
|
[strcat 디버깅]
디버깅 결과 ADD EDI, destLen 명령어 실행후 EDI 레지스터 값이 변경된 것을 확인 할 수 있다.
실행되기 전에는 strStr 문자열 처음 주소가 있었지만 위 그림처럼 끝 지점 주소 값으로 변경되었다.
2.1 strcat 동적 디버깅 분석 2
|
[strcat 디버깅]
반복 완료 후 ECX 값이 계속 감소하여 0이 된 것을 확인 할 수 있다.
EDI 위치는 문자열의 마지막인 00값이며 위 그림과 같이 문자열이 완성 된 것을 확인 할 수 있다.
'Programming > 문자열 처리' 카테고리의 다른 글
strchr어셈블리 구현 & 분석 (0) | 2016.11.10 |
---|---|
strstr 어셈블리 구현 & 분석 (0) | 2016.11.10 |
strcmp 어셈블리 구현 & 분석 (0) | 2016.11.10 |
strcpy 어셈블리 구현 & 분석 (0) | 2016.11.10 |
strlen 어셈블리 구현 & 분석 (0) | 2016.11.10 |
Comments