Tag: mprotect

如何编写一个信号处理程序来捕获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); 并继续我的代码正常运作。 我不想退出这个function。 在未来写入相同的内存,我想再次捕捉信号,并修改写权限,然后logging该事件。 这里是代码 : #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 […]