Insecure-programming-abo4 Insecure Programming by example Advanced Buffer Overflow 4 extern system , puts ; void ( * fn ) ( char * ) = ( void ( * ) ( char * ) ) & system ; int main ( int argv , char * * argc ) { char * pbuf = malloc ( strlen ( argc [ 2 ] ) + 1 ) ; char buf [ 256 ] ; fn = ( void ( * ) ( char * ) ) & puts ; strcpy ( buf , argc [ 1 ] ) ; strcpy ( pbuf , argc [ 2 ] ) ; fn ( argc [ 3 ] ) ; while ( 1 ) ; } Advanced Buffer Overflow 3과 다른 몇 가지 특징을 볼 수 있다. 먼저 main 함수 외부에서 전역 변수로 fn 함수 포인터를 선언한 것을 볼 수 있다. 그리고 활용 인자 값을 추가하여 첫 번째 인자는 스택에 저장하고 두 번째 인자는 malloc 함수를 활용하여 힙에 저장하고, 세 번째 인자는 fn 함수 포인터로 할당한 puts 함수의 인자로 전달하고 있다. 마지막으로 exit 함수를 이용하여 프로그램을 종료하는 것 대신 while 무한 반복이 설정되어 있다. # objdump -d -M intel ./abo4 | grep -A 39 "<main>" 08048444 <main>: 8048444: 55 push ebp 8048445: 89 e5 mov ebp,esp 8048447: 81 ec 28 01 00 00