码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-04-03 17:38:31      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:

试图使用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保护一个静态变量

标签:

原文地址:http://my.oschina.net/2bit/blog/395784

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!