리눅스에서 스택 오버플로가 발생하는 이유는 시스템 스택이 높은 주소에서 낮은 주소로 성장하고, 데이터가 낮은 주소부터 높은 주소 순으로 쓰여지기 때문에 일단 프로그램이 해당 개수를 변경하지 않기 때문입니다. 입력 문자 제한으로 인해 현재 스택에서 데이터가 오버플로될 가능성이 있습니다. 스택 오버플로는 버퍼 오버플로의 한 유형으로, 기본적으로 스택 크기를 초과하여 스택에 작성된 데이터로 인해 발생합니다.
이 튜토리얼의 운영 환경: linux7.3 시스템, Dell G3 컴퓨터.
개요
스택은 필요할 때 컴파일러에 의해 할당되고 필요하지 않을 때 자동으로 지워지는 변수의 저장 영역입니다. 내부 변수는 대개 로컬 변수, 함수 매개변수 등입니다. 힙에 비해 스택은 일반적으로 매우 작습니다. Linux에서는 ulimit -s를 통해 스택 크기를 확인할 수 있습니다.
소위 스택 오버플로는 일종의 버퍼 오버플로입니다. 기본적으로 스택에 기록된 데이터가 스택 크기를 초과하여 데이터가 다른 장치에 기록되게 되어 종종 예측할 수 없는 결과가 발생합니다. 프로그램 충돌.
스택 오버플로의 원인
시스템 스택은 높은 주소에서 낮은 주소로 증가하며, 프로그램이 입력 문자 수를 변경하지 않으면 낮은 주소부터 높은 주소 순으로 데이터가 기록됩니다. 제한 사항으로는 데이터가 현재 스택 프레임을 오버플로하고 반환 주소를 덮어쓰게 되어 프로그램의 실행 흐름을 제어할 가능성이 있습니다.
예제는 다음과 같습니다
스택 오버플로 프로그램:
추천 학습: Linux 비디오 튜토리얼
위 내용은 리눅스 스택 오버플로의 원인은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!