2011-01-27 4 views
0

일부 운영 체제에서는 스택과 힙이 있습니다. 서로가 커집니다. 겹치는 부분을 확인하려면 경계 밴드가 있어야합니다. 누구든지 내게 그것에 대해 설명해 줄 수 있습니까? 스택 오버 플로우 오류를 검사하기위한 자체 함수를 작성하려고합니다.스택 오버플로 방법

답변

3

이와 같은 시스템에서는 일반적으로 힙 상단에 보호 단어 나 유사한 문자가 표시됩니다 (예 : 0xa55a 또는 0xdeadbeef).

그런 다음 정기적으로 해당 보호 단어가 손상되었는지 확인합니다. 그렇다면 뭔가가 메모리를 덮어 씁니다.

이제 은 스택 오버플로가 될 수 있으며, 불량 메모리 쓰기 일 수 있습니다. 그러나이 두 가지 경우 모두 무언가가 심각하게 잘못되어 동일하게 취급 될 수 있습니다.

물론 최신 운영 체제는 Intel 칩과 같은 하드웨어 지원을 사용하는 방식을 취할 수 있습니다. 이 경우 스택 세그먼트를 특정 크기로 설정할 수 있으며 스택 선택기를 사용하여 외부에 쓰려고하면 트랩을 발생시킵니다.

이 경우 힙은 분리되어 유지되도록 다른 선택기를 사용합니다.

+0

@pax 사용 ... –

+0

일반적으로 컴파일러 않습니다. 정적 값이거나 컴파일시 임의 생성 된 무언가이거나 각 호출에 대해 계산 된 무언가 일 수 있습니다. 완전히 구현 관련. –

+0

OS (또는 C 라이브러리 또는 무엇이든)는 OS (또는 C 라이브러리 등)가 거기에 넣기 때문에 무엇인지 알 수 있습니다. – paxdiablo

1

많은 운영 체제는 이러한 공격 경로로부터 보호하기 위해 스택과 힙 사이에 보호 페이지 (또는 유사한 기술)를 배치합니다. 카나리아 (paxdiablo에서 언급 한 방법)를 아직 보지 못했지만, 스택 내부 오버 플로우 (일명 반송 주소를 지키기 위해)를 막기 위해 주로 사용됩니다. Windows에서

가드 페이지 : http://msdn.microsoft.com/en-us/library/aa366549(VS.85).aspx 리눅스 흥미로운가 비록 몇 시간 전에이 문제를 기반으로 악용했다

: 단어를 보호 우리가 알 수있는 방법 http://www.h-online.com/open/news/item/Root-privileges-through-Linux-kernel-bug-Update-1061563.html