exit_got
main이 끝나면 exit이 호출되는 것으로 알고 있는데,
exit_got에 get_shell을 넣으면 실행이 안되는 이유가 뭔가요?
#pwnable
작성자 정보
답변
1
kwakmu18
사이보그
main
함수에서 반환하면 __libc_start_call_main
함수에서 __GI_exit
라는 함수를 호출합니다.
저도 __GI_exit
함수가 exit
함수와 동일한 함수인지는 잘 모르겠습니다..
그런데 __libc_start_call_main
함수는 libc.so.6
라이브러리 내의 함수이기 때문에, __GI_exit
함수를 호출할 때 plt
, got
를 이용하는 것이 아닌 라이브러리 내에서 상대 주소로 호출하게 됩니다.
-
__libc_start_call_main
에서__GI_exit
함수를 호출할 때는plt
를 사용하지 않음
-
ssp_000 바이너리 내의
alarm_handler
함수에서exit
함수를 호출할 때는plt
를 사용함
따라서 exit
함수의 got
를 get_shell
함수의 주소로 덮어쓰더라도, 프로그램이 정상적으로 종료되면 get_shell
함수가 호출되지 않습니다.