【練習】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; }