이번 문제는 함수 포인터에 대한 문제다
저번 단계의 포인터문제에서도 조금 머리를 썩였는데 이번은 어떨지…
일단 스택 구조부터 알아보자
먼저 스택 프레임으로 0x38. 56바이트 만큼 할당된다
그리고 buf의 시작은 ebp-56부터 시작한다 그리고 call함수가 호출되는 부분이 ebp-16이다
그렇다면 ebp-56에서 20만큼 그리고 다음 변수인 call이 ebp-16에서부터 4만큼
Buf와 call사이에 20만큼이 빈다, 더미다
그리고 call다음에 crap이 온다
그 후에 dummy가 8만큼온다
다음 처럼 보일 수 있다
이렇게 되는 것이다
자 이제..main+33에 BP를 걸고 아무값이나 넣고 뭐가들어가있는지 확인해보자
call부분에 printit이 들어가 있다 그럼 여기에 shell의 주소를 넣게 된다면 shell()이 실행 되는걸까?
한번 해보자
역시나! Call에 shell()의 주소값을 넣었더니 shell()함수가 실행됬다
함수 포인터라길래 겁을 먹었는데 의외로 쉽게 풀린 것 같다
Phantom@TeamH4C