티스토리 뷰

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값이며 위 그림과 같이 문자열이 완성 된 것을 확인 할 수 있다.

Comments
최근에 올라온 글
최근에 달린 댓글
TAG
more
Total
Today
Yesterday