How to write a signal handler to catch SIGSEGV?

前端 未结 5 1474
被撕碎了的回忆
被撕碎了的回忆 2020-11-22 15:26

I want to write a signal handler to catch SIGSEGV. I protect a block of memory for read or write using

char *buffer;
char *p;
char a;
int pagesize = 4096;

         


        
5条回答
  •  悲&欢浪女
    2020-11-22 15:57

    You've fallen into the trap that all people do when they first try to handle signals. The trap? Thinking that you can actually do anything useful with signal handlers. From a signal handler, you are only allowed to call asynchronous and reentrant-safe library calls.

    See this CERT advisory as to why and a list of the POSIX functions that are safe.

    Note that printf(), which you are already calling, is not on that list.

    Nor is mprotect. You're not allowed to call it from a signal handler. It might work, but I can promise you'll run into problems down the road. Be really careful with signal handlers, they're tricky to get right!

    EDIT

    Since I'm being a portability douchebag at the moment already, I'll point out that you also shouldn't write to shared (i.e. global) variables without taking the proper precautions.

提交回复
热议问题