【練習】mprotectで静的変数を保護しようとする
867 ワード
mprotectを使用して静的変数配列を保護しようとします.静的変数が保護されている部分を書くと、プログラムcore dump
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <unistd.h>
int protect_bss(void * p, size_t len)
{
size_t page_size = sysconf(_SC_PAGE_SIZE);
if(page_size == -1) {
return -1;
}
size_t start = (size_t)p;
size_t new_start = (start + (page_size - 1)) / page_size * page_size;
size_t new_len = (start + len - new_start) / page_size * page_size;
if(mprotect((void *)new_start, new_len, PROT_READ) == 0) {
printf( "bss [%p, %p), protected [%p, %p)
", p, p+len, (void*)new_start, (void*)new_start+new_len);
return 0;
}
return -1;
}
char bss[20000];
int main(void)
{
printf("%d
", protect_bss(bss, sizeof(bss)));
bss[10000] = 1;
return 0;
}