Questions tagged «mprotect»

5
如何编写信号处理程序以捕捉SIGSEGV?
我想编写一个信号处理程序来捕捉SIGSEGV。我保护一块内存以供使用 char *buffer; char *p; char a; int pagesize = 4096; mprotect(buffer,pagesize,PROT_NONE) 这样可以保护从缓冲区开始的内存的页面大小字节免受任何读取或写入的影响。 其次,我尝试读取内存: p = buffer; a = *p 这将生成一个SIGSEGV,并且将调用我的处理程序。到现在为止还挺好。我的问题是,调用处理程序后,我想通过以下方式更改内存的访问写入: mprotect(buffer,pagesize,PROT_READ); 并继续正常运行我的代码。我不想退出该功能。在将来对同一内存进行写操作时,我想再次捕获该信号并修改写权限,然后记录该事件。 这是代码: #include <signal.h> #include <stdio.h> #include <malloc.h> #include <stdlib.h> #include <errno.h> #include <sys/mman.h> #define handle_error(msg) \ do { perror(msg); exit(EXIT_FAILURE); } while (0) char *buffer; int flag=0; …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.