attackme의 코드를 읽어봅시다.함수 포인터와 fgets함수가 사용되었는데 이는 버퍼오버플로우를 이용해 main함수의 리턴 값(call함수의 함수포인터를 초기화)을 shell함수의 시작주소로 바꿔라 라는 의미입니다. 메인함수를 살펴보면 함수 포인터 선언부분이 ebp-16인데 fgets함수에서 56바이트만큼 입력받습니다. 그러므로 40바이트는 쓰레기 값을 주고 나머지 16바이트에 0x8048500대신 shell함수의 시작주소를 넣어주면 됩니다. shell함수의 시작주소를 얻었습니다. (python -c 'print "\x90"*40+"\xd0\x84\x04\x08"'; cat)|./attackme 끝!