컴퓨터 지식 네트워크 - 컴퓨터 프로그래밍 - 스택 오버플로란 무엇인가요?

스택 오버플로란 무엇인가요?

스택 오버플로와 힙 오버플로란 무엇인가요?

소위 오버플로는 넓은 의미에서 범위를 초과하는 것을 의미하며 정수에는 오버플로가 있습니다. 예를 들어 8바이트 부호 없는 정수 범위는 0부터 255까지입니다.

0 - 1은 언더플로우이고 255 + 1은 오버플로우입니다.

본론으로 들어가겠습니다.

int f(int x)

{

int a[10];

a[bl1] = x;

}

이것은 스택 오버플로입니다. x는 위치에 기록됩니다. 쓰지 말아야 할 곳. 특정 컴파일 모드에서는 x의 내용이 f의 원래 반환 주소를 덮어씁니다. 즉, 호출 위치로 복귀하기로 되어 있던 f 함수가 x가 가리키는 위치로 복귀한다. 일반적으로 이 시점에서 프로그램이 충돌합니다. 그러나 x가 의도적으로 악성 코드 조각을 가리키면 해당 악성 코드가 실행됩니다.

힙 오버플로는 다양한 환경의 힙 구현이 정확히 동일하지 않기 때문에 상대적으로 복잡합니다. 그러나 프로그램 관리 힙에는 힙에 대한 다양한 정보를 표시하기 위한 추가 데이터가 있어야 합니다. 위의 할당이 힙 메모리에서 발생하면 힙의 논리적 구조가 손상될 수 있습니다. 그런 다음 원래 액세스할 수 없었던 데이터를 수정합니다.

int f(char *s, int n)

{

char a[10];

memcpy(a, s , n);

...

}

이는 수신 데이터의 길이가 10보다 큰 경우 스택 오버플로의 보다 현실적인 예입니다. , 오버플로가 발생하여 f의 반환 주소가 변경됩니다. 특정 주소에 미리 악성코드를 작성해 놓으면 해당 코드가 실행됩니다.

힙 오버플로가 악성 코드를 실행하는 상황 중 하나는 지나치게 긴 데이터를 통해 힙 구조를 파괴하여 다음 애플리케이션이 특정 함수 포인터가 저장된 위치를 획득한 후 수정할 수 있도록 하는 것입니다.

스택 및 힙 오버플로의 고유한 특징 중 하나는 제3자가 특정 데이터를 제공함으로써 완전히 코드 수준 침입을 달성할 수 있다는 것입니다. 게임을 플레이하는 경우 PSP 시스템이 tiff 파일을 표시할 때 PSP3000 크랙이 오버플로 취약점을 사용한다는 것을 알 수 있습니다. tiff 파일에는 침입 코드 조각이 포함되어 있습니다. 이 코드는 tiff 파일이 로드될 때 로드되지만 지금은 실행할 수 없습니다. 그러나 TIFF의 데이터 중 일부는 너무 길고, 너무 긴 부분에는 침입 코드의 위치가 포함되어 있습니다. 시스템이 데이터의 이 부분을 읽으면 침입 코드가 실행됩니다.

스택 오버플로란 무엇을 의미합니까?

스택 오버플로는 스택에 할당된 로컬 데이터 블록의 크기에 관계없이 너무 많은 데이터가 데이터 블록에 기록되어 데이터가 범위를 벗어나서 결과가 덮어쓰여졌습니다. 또는 긴 문자열에 코드 조각을 삽입하고 프로세스의 반환 주소를 이 코드의 주소로 덮어써서 프로세스가 반환될 때 프로그램이 이 자체 작성 코드를 실행하기 시작하는 것으로 해석될 수 있습니다.

컴퓨터 화면에 나타날 때 (스택 오버플로, 위치: 37행)은 무엇을 의미합니까?

zhidao.baidu/...iST4BK

누구든지 할 수 있나요? 답변

스택 오버플로의 일반적인 원인은 무엇입니까?

일반적인 상황에서는 읽고 쓰는 데이터가 적용된 메모리의 범위를 초과합니다.

스택 오버플로는 일반적으로 분할 오류를 보고합니다.

컴퓨터가 창을 띄울 때 스택 오버플로의 첫 번째 줄은 무엇을 의미합니까?

속담처럼, 스택 오버플로는 스택 오버플로를 나타냅니다. 메모리 힙 영역에 공간을 동적으로 할당하려면 malloc(); 함수를 사용하십시오. 일반 프로그램에서 이를 사용하지 않으면 힙 오버플로가 발생하지 않습니다. 스택 오버플로: 스택 공간은 미리 설정되어 있으며 일반적으로 함수 내부에 지역 변수를 정의하고 공간이 설정된 스택 공간 크기를 초과하면 오버플로됩니다. 뿐만 아니라 중첩된 함수가 너무 많으면 스택 오버플로도 발생합니다. 함수가 끝나기 전에 함수가 차지한 변수가 해제되지 않아 스택 공간을 차지하기 때문입니다. 해결책: 스택 공간 크기를 적절하게 설정하십시오. 코드를 분석하고 어떤 링크가 가장 많은 임시 변수 바이트를 사용하는지 평가합니다. 설정된 스택 공간은 이보다 커야 합니다.

또한 스택 공간을 차지하지 않도록 대규모 변수를 전역적으로 정의할 수도 있습니다.

질문해도 될까요: 스택 오버플로가 무엇을 의미합니까? 그것을 처리하는 방법?

스택 오버플로는 스택에 할당된 로컬 데이터 블록의 크기에 관계없이 데이터 블록에 너무 많은 데이터가 기록되어 데이터가 범위를 벗어나 이전 스택 데이터를 덮어쓰게 되는 것을 의미합니다. 단어가 너무 많아서요!

스택 오버플로는 무엇을 의미합니까?

운영 체제가 프로그램 프로세스에 할당한 메모리 블록이 프로그램의 요청을 충족할 수 없습니다.

1001 재귀가 너무 깊습니다. ; 스택 오버플로는 무엇을 의미하나요?

1001 재귀는 공간을 시간과 교환하면서 반복적으로 호출됩니다. 너무 많이 반복하면 메모리 오버헤드가 너무 높아서 이 질문이 보고될 것 같습니다. 재귀 없이 해결할 수 있습니다.

스택 오버플로의 일반적인 원인은 무엇입니까?

가비지 리소스는 재활용되지 않습니다.

스택 오버플로의 일반적인 원인은 무엇입니까?

요청한 메모리가 충분하지 않습니다. 요청한 메모리를 모두 사용했지만 여전히 데이터가 저장되고 있습니다.

上篇: 소 스테이크 가격은 얼마인가요? 소 스테이크의 진위 여부를 어떻게 알 수 있나요? 下篇: 왜 나이가 들수록 흰머리가 나는 걸까요?
관련 내용