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를 사용하지 않음
    image.png

  • ssp_000 바이너리 내의 alarm_handler 함수에서 exit 함수를 호출할 때는 plt를 사용함
    image.png

따라서 exit 함수의 gotget_shell 함수의 주소로 덮어쓰더라도, 프로그램이 정상적으로 종료되면 get_shell 함수가 호출되지 않습니다.

2024.05.29. 13:56
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기