내 시스템 (리눅스 커널 2.6.32-24)은 주소 공간 레이아웃 무작위 화 (ASLR)라는 기능을 구현하고 있습니다. ASLR은 스택 크기를 변경하는 것으로 보입니다.가변 스택 크기
void f(int n)
{
printf(" %d ", n);
f(n + 1);
}
int main(...)
{
f(0);
}
분명히 프로그램을 실행하면 스택 오버플로가 발생합니다. 문제는 세그먼트 화 오류가 각 실행마다 "n"의 다른 값에서 발생한다는 것입니다. 이것은 분명히 ASLR에 의해 발생합니다 (프로그램을 항상 "n"과 동일한 값으로 종료 할 경우).
나는 두 가지 질문이 있습니다
- 은 ASLR은 스택 크기는 약간의 변수를 만들 것을 의미합니까?
- 그렇다면이 사실에 문제가 있습니까? 커널 버그 일 수 있습니까?
컴파일러가 그 함수를 단순한 무한 루프로 꼬리 - 호출 - 최적화하지 않는다는 것은 놀라운 일입니다. – caf