>  기사  >  운영 및 유지보수  >  리눅스 스택 오버플로의 원인은 무엇입니까?

리눅스 스택 오버플로의 원인은 무엇입니까?

WBOY
WBOY원래의
2022-06-01 11:12:173456검색

리눅스에서 스택 오버플로가 발생하는 이유는 시스템 스택이 높은 주소에서 낮은 주소로 성장하고, 데이터가 낮은 주소부터 높은 주소 순으로 쓰여지기 때문에 일단 프로그램이 해당 개수를 변경하지 않기 때문입니다. 입력 문자 제한으로 인해 현재 스택에서 데이터가 오버플로될 가능성이 있습니다. 스택 오버플로는 버퍼 오버플로의 한 유형으로, 기본적으로 스택 크기를 초과하여 스택에 작성된 데이터로 인해 발생합니다.

리눅스 스택 오버플로의 원인은 무엇입니까?

이 튜토리얼의 운영 환경: linux7.3 시스템, Dell G3 컴퓨터.

Linux 스택 오버플로의 원인

개요

스택은 필요할 때 컴파일러에 의해 할당되고 필요하지 않을 때 자동으로 지워지는 변수의 저장 영역입니다. 내부 변수는 대개 로컬 변수, 함수 매개변수 등입니다. 힙에 비해 스택은 일반적으로 매우 작습니다. Linux에서는 ulimit -s를 통해 스택 크기를 확인할 수 있습니다.

소위 스택 오버플로는 일종의 버퍼 오버플로입니다. 기본적으로 스택에 기록된 데이터가 스택 크기를 초과하여 데이터가 다른 장치에 기록되게 되어 종종 예측할 수 없는 결과가 발생합니다. 프로그램 충돌.

스택 오버플로의 원인

시스템 스택은 높은 주소에서 낮은 주소로 증가하며, 프로그램이 입력 문자 수를 변경하지 않으면 낮은 주소부터 높은 주소 순으로 데이터가 기록됩니다. 제한 사항으로는 데이터가 현재 스택 프레임을 오버플로하고 반환 주소를 덮어쓰게 되어 프로그램의 실행 흐름을 제어할 가능성이 있습니다.

예제는 다음과 같습니다

스택 오버플로 프로그램:

리눅스 스택 오버플로의 원인은 무엇입니까?

추천 학습: Linux 비디오 튜토리얼

위 내용은 리눅스 스택 오버플로의 원인은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.