문제

프로그래밍에서 스택 오버플로와 버퍼 오버플로의 다른 점은 무엇입니까?

도움이 되었습니까?

해결책

스택 오버 플로우는 실행 스택이 예약 된 메모리를 넘어 자라는 경우를 구체적으로 나타냅니다. 예를 들어, 종료없이 재귀 적으로 호출하는 함수를 호출하면 각 함수 호출이 새 스택 프레임을 생성하고 스택은 결국 예약 된 것보다 더 많은 메모리를 소비 할 때 스택 오버플로가 발생합니다.

버퍼 오버 플로우는 프로그램이 모든 버퍼에 할당 된 메모리의 끝을 넘어서 (스택에가 아니라 힙에 포함)를 기록하는 모든 경우를 나타냅니다. 예를 들어, 힙에서 할당 된 배열의 끝을 지나서 쓰면 버퍼 오버플로가 발생했습니다.

다른 팁

주요 차이점은 스택과 버퍼의 차이를 아는 것입니다.

스택은 실행 프로그램을 실행할 수 있도록 예약 된 공간입니다. 함수를 호출 할 때 매개 변수와 리턴 정보가 스택에 배치됩니다.

버퍼는 단일 목적으로 사용되는 일반적인 메모리입니다. 예를 들어, 문자열은 버퍼입니다. 할당 된 것보다 문자열에 더 많은 데이터를 쓰면 과도하게 실행할 수 있습니다.

스택 오버플로: 현재 스레드에 할당 된 메모리를 위해 스택에 너무 많은 것을 넣었습니다.

버퍼 오버 플로우: 현재 할당 된 버퍼의 크기를 초과했으며 적합하도록 크기를 조정하지 않았습니다 (또는 더 이상 크기를 조정할 수 없습니다).

아마 여기에서 알고 싶어하는 것보다 더 :

스택 오버플로

버퍼 오버 플로우

StackoverFlow는 스레드의 스택 크기가 해당 스레드의 최대 허용 스택 크기를 초과 할 때입니다.

버퍼 오버플로는 값이 현재 프로그램에 의해 할당되지 않은 메모리에 기록 된 경우입니다.

버퍼 오버 플로우는 일반적으로 스택이나 힙에 관계없이 메모리 버퍼가 바운드를 넘어 액세스 할 때마다 나타납니다. 스택 오버플로는 스택이 할당 된 한계를 초과하고 대부분의 기계/OS에서 힙 위로 실행되고 있음을 의미합니다.

"스택과 버퍼의 차이점은 무엇입니까?"라고 말하는 것을 의미하지 않습니다. - 그것은 당신을 더 빨리 통찰력으로 이끌 것입니다. 당신이 그렇게 멀어지면, 당신은 이들 각각을 지나치게 흐르는 것이 무엇을 의미하는지 생각할 수 있습니다.

1. 스택 기반 버퍼 오버플로• 프로그램이 의도 된 데이터 구조 (고정 길이 버퍼) 외부의 프로그램의 통화 스택에 메모리 주소에 기록 될 때 발생합니다. • 스택 기반 프로그래밍의 특성 1. "스택"은 자동 변수가 할당되는 메모리 공간입니다. 2. 함수 매개 변수는 스택에 할당되며 시스템에 의해 자동으로 초기화되지 않으므로 초기화 될 때까지 쓰레기가 있습니다. 3. 함수가주기가 완료되면 스택의 변수에 대한 참조가 제거됩니다. (즉, 함수가 여러 번 호출되는 경우, 함수가 호출되고 종료 될 때마다 로컬 변수와 매개 변수가 재현되고 파괴됩니다.)
• 공격자는 스택 기반 버퍼가 오버 플로우를 지나서 다양한 방식으로 프로그램을 조작하여 덮어 쓰기
1. 공격자에게 도움이 될 수있는 프로그램의 동작을 변경하기 위해 스택의 메모리 버퍼 근처에있는 로컬 변수.
2. 스택 프레임에서 주소를 반환합니다. 함수가 반환되면 공격자가 지정한대로 반환 주소에서 실행이 재개됩니다. 3. 이후에 실행되는 함수 포인터 또는 예외 처리기. • 악용을 극복하기위한 요인
1. 주소의 NULL 바이트 2. 쉘 코드의 위치의 변동성 3. 환경 쉘 코드의 차이점은 소프트웨어 취약성을 악용하는 데 사용되는 작은 코드입니다.

2. 힙 버퍼 오버플로

• 힙 데이터 영역에서 발생합니다. • 오버 플로우는 애플리케이션이 버퍼가 포함하도록 설계된 것보다 더 많은 데이터를 버퍼에 복사 할 때 발생합니다. • 해당 소스가 대상에 맞는 것을 먼저 확인하지 않고 버퍼에 데이터를 복사하는 경우 악용에 취약합니다. • 스택 기반 및 힙 기반 프로그래밍의 특성 : • "힙"은 동적 객체가 할당 될 때 메모리 공간 인 "무료 상점"입니다. • 힙은 메모리 공간이 동적으로 할당 된 new (), malloc () 및 calloc () 함수입니다. • 동적으로 생성 된 변수 (즉, 선언 된 변수)는 실행 전에 힙에 생성되고 객체의 수명주기가 완료 될 때까지 메모리에 저장됩니다. • 익스플로잇이 수행됩니다. • 링크 된 목록 포인터와 같은 내부 구조를 무시하기 위해 데이터를 손상시킴으로써 수행됩니다. • 프로그램 기능을 무시하기위한 포인터 교환

버퍼 오버 플로우를 언급하는 대부분의 사람들은 스택 오프 로스를 의미합니다. 그러나 오버플로는 스택에만 국한되지 않은 모든 영역에서 발생할 수 있습니다. 힙 또는 BSS와 같은. 스택 오버플로는 스택의 반환 주소를 덮어 쓰는 것으로 제한되지만 반환 주소를 덮어 쓰지 않는 일반 오버플로는 아마도 다른 로컬 변수를 덮어 쓸 것입니다.

RAM 다이어그램으로 더 간단한 방식으로 설명하겠습니다. 점프하기 전에 STACKFRAME, 힙 메모리에 대해 읽는 것이 좋습니다.

보시다시피, 스택은 스택이라고 가정하면 스택이 아래쪽으로 자랍니다 (화살표로 표시). 커널 코드, 텍스트, 데이터는 모두 정적 데이터이므로 고정되었습니다. 힙 부분은 역동적 인 것입니다 (화살표에 의해 표시됨).

enter image description here

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top