cygwin 환경에서 Overflow 시 무한루프가 발생하는 것을 발견하였다.

gcc버전은 3.4.5이다. 이 코드를 단순하게 컴파일 하고 실행한다.






그런데 이 그림은 printf 함수를 실행하고 나서 다시 실행될 때의 캡쳐화면이다.
0x0022FF4C를 살펴보면 이 부분이 RET(Return Address) 주소 값인데
중요한 것은 파라미터 값이 덮어 씌어질 때 31323334~~~38 (문자열 28개)가 들어가고
그 다음에 "0x00" (문자열이 종료되는 것을 알려주는 NULLl pointer)가 들어간다는 사실이다.
그래서 RET가 0x40124B에서 0x401200으로 변경되고 프로그램은 0x40120부터 다시 실행 되는 것이다.
그래서 무한 루프가 된다.
무한 루프가 발생하는 것이 신기해서 "NULL"이 들어가는 것을 생각하지 못하고 분석해 보았다.
워낙 쉬운내용이라 기술적인 내용은 없고 재미로 올려본다 ^^



최근 덧글