2011-12-23 1 views
2

동적 할당 메모리에 대한 읽기 액세스를 방지하는 API 또는 방법이 있습니까?동적 할당 메모리에 대한 읽기 액세스 (및 쓰기)를 방지하는 API 또는 메소드가 있습니까?

char *ptr = malloc(4);` 
strcpy(ptr, "Hello");` 

이제 읽기 권한이없고 쓰기 금지 된 상태로 ptr하고 싶습니다. 어떻게 수행하나요?

ptr은 매핑 된 메모리를 가리킬 것으로 예상되므로 매번 동적 메모리를 앰핑하는 것이 불가능할 수도 있으므로 mprotect을 사용하고 싶지 않습니다.

+2

다른 코드에서 포인터를 볼 수 없습니까? – fge

+0

@fge : 불가능합니다. 눈에 잘 띄게해야합니다. 그러나 읽기 - 쓰기 액세스가 없습니다. 그것을 성취하는 방법? – kingsmasher1

+0

왜'mmap'이 옵션이 아닌가요? 그것은 당신에게'mprotect' 할 수있는 많은 페이지를 제공합니다. 메모리 사용을 유지하기 위해 이러한 모든 읽기 전용 문자열을 보호 된 페이지에 함께 그룹화 할 수 있습니다. –

답변

5

mprotect은 여전히 ​​대답입니다. 쓰기 가능해야 할 필요가있는 할당 자 제어 정보가없는 페이지 정렬 할당이 필요하므로 익명 메모리를 사용하여 메모리를 할당하십시오.

+0

매번 동적으로 할당 된 메모리를 매핑 할 때 시스템 오버 헤드 또는 단점이 있습니까? 나는 그것이 분명히 있다고 생각한다. malloc을 호출하면 전체 페이지를 할당하기 때문에 메모리 낭비가 큽니다. 권리? – kingsmasher1

+1

@ kingsmasher1 : 5 자 문자열을 저장할 때마다 'mmap'을 호출 할 필요가 없습니다. 여러 페이지를 할당하기 위해'mmap'을 한 번 호출하고 메모리가 다 소모 될 때까지 문자열을 순차적으로 저장하십시오. 그런 다음 더 많은 페이지를 보려면'mmap'을 다시 호출해야 할 수도 있습니다. –

+0

@BlagovestBuyukliev : 위의 내 의견을 참조하십시오. 이유는 무엇입니까? – kingsmasher1

관련 문제