美文网首页
memalign 和 mprotect用法

memalign 和 mprotect用法

作者: ebayboy | 来源:发表于2019-08-15 19:34 被阅读0次

#include <unistd.h>

#include <signal.h>

#include <stdio.h>

#include <malloc.h>

#include <stdlib.h>

#include <errno.h>

#include <sys/mman.h>

#include <string.h>

#define handle_error(msg) \

    do { perror(msg); exit(EXIT_FAILURE); } while (0)

char *buffer;

static void handler(int sig, siginfo_t *si, void *unused)

{

    printf("Got SIGSEGV at address: 0x%lx\n", (long) si->si_addr);

    exit(EXIT_FAILURE);

}

int main(int argc, char *argv[])

{

    char *p;

    int pagesize;

    pagesize = sysconf(_SC_PAGE_SIZE);

    if (pagesize == -1)

        handle_error("sysconf");

    size_t len = 8097;

    size_t all_size = pagesize * (len/pagesize + 1);

    printf("allsize:%d\n", all_size);

/* memalign申请的内存是按页面对齐的, 但是按时间长度申请的, 而mproject保护的长度如果不足一页是按一页去保护的, 所以如果memalign申请的内存要是l(en/pagesize + 1)的长度, 以防mproject保护的地址越界*/

 buffer = memalign(pagesize, all_size);

    if (buffer == NULL)

        handle_error("memalign");

    printf("Start of region:        0x%lx\n", (long) buffer);

    strcpy(buffer, "hello world");

    if (mprotect(buffer, len, PROT_READ) == -1)

        handle_error("mprotect");

    //buffer[8191] = '9';

    char *buffer2 = memalign(pagesize, len);

    if (buffer2 == NULL)

        handle_error("memalign");

    buffer2[4] = '8';

    if (mprotect(buffer, len, PROT_READ|PROT_WRITE) == -1) {

        perror("mproject");

    }

    buffer[8191] = '9';

#if 0

    buffer[4] = '9';

    for (p = buffer ; ; )

        *(p++) = 'a';

#endif

    printf("Loop completed\n");    /* Should never happen */

    exit(EXIT_SUCCESS);

}

相关文章

  • memalign 和 mprotect用法

    #include #include #include #include #include #...

  • api

    posix_memalign() 内存申请方式posix_memalign 内存对齐:malloc申请到的内存在3...

  • CPP 内存Core Dump

    利用mprotect+backtrace定位故障 利用mprotect保护栈空间:在操作系统中,进程的栈空间(X8...

  • Jarvis OJ level5 wp

    题目要求:附件同level3_x64,mmap和mprotect练习,假设system和execve函数被禁用,请...

  • mprotect()函数 Unix/Linux

    https://www.yiibai.com/unix_system_calls/mprotect.html

  • level5 writeup

    jarvisoj平台上的level5题目要求练习 mmap和mprotect 函数 不能调用system或者是ex...

  • posix_memalign vs. malloc

  • 定时器

    setTimeout和clearTimeout基本用法 setInterval和clearInterval基本用法...

  • this,that和it用法

    英语有很多很细小的知识点,而这些细小的知识点往往就是考点。同学们很容易由于注意不到而犯错误,下面为大家分享this...

  • iOS crash:Mprotect failed at 0x

    Mptotect Crash 触发 :1.线程调用GC循环 2.调用.NET functionality的功能,如...

网友评论

      本文标题:memalign 和 mprotect用法

      本文链接:https://www.haomeiwen.com/subject/xcetsctx.html