【练习】试图通过mprotect保护一个静态变量

试图使用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)\n", p, p+len, (void*)new_start, (void*)new_start+new_len);
        return 0;
    }

    return -1;
}

char bss[20000];

int main(void)
{
    printf("%d\n", protect_bss(bss, sizeof(bss)));
    bss[10000] = 1;
    return 0;
}


你可能感兴趣的:(【练习】试图通过mprotect保护一个静态变量)