我一直在使用一种技术来透明地对内存映射数据进行数据转换。这个想法基本上是内存映射所需的文件,并创建第二个读/写保护的匿名区域。当用户访问匿名区域时,会捕获由此产生的段错误,转换数据并更改权限以允许继续访问。
它工作得很好,但有一个小问题。在没有首先接触数据的情况下将指针传递给像 write() 这样的系统调用不会触发段错误处理程序,而是只返回 EFAULT,因为没有调用处理程序来修复权限。有没有办法让系统调用在出现问题时使用用户空间处理程序?
不,当缓冲区错误时,没有办法像write
make a这样的系统调用。SIGSEGV
ReturnEFAULT
是该write(2)
系统调用语义的一部分。
LD_PRELOAD
如果只关心libc.so
;你可能会做一些事情 你也可以ptrace
用来捕捉系统调用 à la strace
。
另请参阅对您的一个非常相似的问题的答案。