在系统调用中导致段错误返回用户信号处理程序?

时间:2012-07-27 15:27:38

标签: c linux

我一直在玩一种技术来透明地对内存映射数据进行数据转换。这个想法基本上是为了存储映射一个所需的文件,并创建一个读/写受保护的第二个匿名区域。当用户访问匿名区域时,将捕获生成的段错误,转换数据并更改权限以允许继续访问。

效果很好,但有一个小问题。在没有先将数据传递给系统调用(如write())的情况下传递指针不会触发segfault处理程序,而是只返回EFAULT,因为未调用处理程序来修复权限。有没有办法让系统调用在出现问题时使用用户空间处理程序?

1 个答案:

答案 0 :(得分:3)

当缓冲区出错时,没有办法让write之类的系统调用成为SIGSEGV。返回EFAULTwrite(2)系统调用的语义的一部分。

如果仅关注LD_PRELOAD,您可以执行libc.so件事;您也可以使用ptrace来捕获系统调用àlastrace

另请参阅this answer与您的非常相似的问题。