2011-09-23 3 views
0

메모리 영역을 보호 할 방법이 있습니까? 이 '\ 0'로 끝나는메모리가 변경되지 않도록 보호하기

#define BUFFER 4 
struct 
{ 
    char s[BUFFER-1]; 
    const char zc; 
} str = {'\0'}; 

printf("'%s', zc=%d\n", str.s, str.zc); 

아이폰에의 버퍼-1의 문자열을 운영하기로하고, garantee :

나는이 구조체가있다.

그러나 컴파일러에만 오류가 있습니다 :

str.zc='e'; /*error */ 

하지 않을 경우 :

str.s[3]='e'; /*no error */ 

의 gcc로 컴파일 할 수있는 몇 가지 플래그가, 그뿐만 아니라 좋은 경우에.

덕분에, BECO

+0

http://en.wikipedia.org/wiki/Memory_protection –

+0

감사합니다. 나는 지금 당장 살펴볼 것입니다. –

+0

@VladLazarenko 질문에서 지적한 것과 같은 구조 내에서 단일 바이트를 보호 할 방법이 없습니다. 레지스터를 통한 페이지 보호 만. –

답변

0

는 GCC의 -fstack - 보호 - 모든 옵션을 살펴 런타임 오류를 감지합니다. 설명 된 것과 같이 매우 작은 오버플로를 탐지하려고 시도 할 때 제한된 사용 일 수 있습니다.

아쉽게도 컴파일 타임에 설명한 것과 같은 버퍼 오버 플로우 시나리오를 감지하는 데 많은 정보를 찾을 수 없습니다. C 언어의 관점에서 문법은 완전히 정확하며, 언어는 당신에게 매달려있는 로프를 제공합니다. 버퍼를 직접 보호하려면 원하는 메모리에 액세스하기 전에 인덱스 유효성을 검사하는 배열 액세스에 프런트 엔드를 쓸 수 있습니다.

+0

감사. 그렇다면 신호를 트리거 할 수 있습니까? 어떻게해야할지 모르겠다. 여기서 창의력이 필요하다. 성능에 대해 걱정하지 마십시오. –

관련 문제