3

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

它工作得很好,但有一个小问题。在没有首先接触数据的情况下将指针传递给像 write() 这样的系统调用不会触发段错误处理程序,而是只返回 EFAULT,因为没有调用处理程序来修复权限。有没有办法让系统调用在出现问题时使用用户空间处理程序?

4

1 回答 1

3

不,当缓冲区错误时,没有办法像write make a这样的系统调用。SIGSEGVReturnEFAULT是该write(2)系统调用语义的一部分。

LD_PRELOAD 如果只关心libc.so;你可能会做一些事情 你也可以ptrace用来捕捉系统调用 à la strace

另请参阅对您的一个非常相似的问题的答案。

于 2012-07-27T16:31:47.287 回答