작성
·
300
·
수정됨
0
안녕하세요.
배운 내용을 다시 공부하면서 실행해본 결과입니다.
함수 호출시에 232바이트만큼
rsp를 이동시키고 rbp를 32바이트만큼 빼서
스택프레임당 32byte와 200byte의 여백을 남기는것을
확인했습니다.
컴파일러가 컴파일시에 스택 사이즈를 정하고 저장하는 위치가 어디인지 궁금합니다. (예를들어 스택프레임은 32byte고 중간에 카나리(?)는 200byte라는걸 결정하면, os는 프로그램 실행시 해당 정보를 어떻게 알 수 있나요?)
답변 1
0
최대 스택 크기 등은 프로그램을 빌드할 때 설정할 수 있지만
그렇다고 운영체제가 뭔가를 알고 하는 개념이 아닙니다.
특정 스택 메모리 위치 (sp 레지스터가 가리키는)에서 일련의 명령어들을 실행할 뿐
그 정보가 정확한지 유효한지 등은 신경쓰지 않습니다.
문제가 있으면 프로그램이 crash가 나거나 이상하게 동작할 것이고
이런 것을 악용하는게 해킹의 원리입니다.