赞
踩
#include <thread> #include <stdio.h> #include <sys/mman.h> #include <errno.h> #include <unistd.h> #include <stdlib.h> #include <cerrno> #include <cstring> #include <iostream> #include <assert.h> void run(char *ptr) { ptr[100]=100; //非法写入 printf("success\n"); } int main() { int page_count=64; const int page_size = sysconf(_SC_PAGE_SIZE); // int mem_size=page_size*page_count; char * sys_config=(char*)aligned_alloc(page_size,mem_size); int ret=mprotect(sys_config,mem_size, PROT_READ);//需要页对齐 assert(ret==0); auto t=new std::thread(run,sys_config); //在别的线程中操作该内存 t->join(); delete t; }
g++ -ggdb -o demo main.cpp -lpthread
ulimit -c unlimited
./demo
gdb ./demo core
(gdb) bt
#0 run (ptr=0x7cd0e21b3000 "") at main.cpp:14
(gdb) quit
vim main.cpp +14
12 void run(char *ptr)
13 {
14 ptr[100]=100; //非法写入
15 printf("success\n");
16 }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。