나는 현재 읽고 있다리눅스 커널 개발저자: 로버트 러브.
"15 프로세스 주소 공간" 장에서 그는 프로세스의 메모리 맵을 인쇄합니다.
user@machine:~$ pmap 1424
#all the processes mapped memory (skipped for readability)
bfffe000 (8KB) rwxp (0:00 0) [ stack ]
마지막 줄은 스택을 보여줍니다(아래쪽으로 증가).
그는 이제 이렇게 말합니다.
스택은 자연스럽게 읽기, 쓰기 및 실행이 가능합니다. 그렇지 않으면 별로 쓸모가 없습니다.
내가 아는 한, 우리는 스택을 사용하여 데이터와 코드 주소(함수 및 해당 매개변수/변수)를 저장합니다.
스택이 실행 가능해야 하는 이유를 모르겠습니다.
답변1
이 정보는 오래되었으며 일반적으로 스택을 더 이상 실행할 수 없습니다.
00007ffd884fa000 356K rw--- [ stack ]
GCC가 빌드되는 경우 실행 가능한 스택이 필요합니다.중첩된 함수 호출을 위한 트램펄린. 이러한 트램펄린은 런타임 시 생성되어 스택에 저장되는 작은 코드 조각입니다. 따라서 사용하는 경우 스택을 실행할 수 있어야 합니다. 컴파일러는 이 요구 사항을 추적하고 바이너리(라이브러리 및 실행 파일)로 플래그를 출력하여 실행 가능한 스택이 필요한지 여부를 나타냅니다. 다음을 사용하여 이 플래그의 값을 보고 조작할 수 있습니다.execstack(8)
.