如果improtect一个没有prot的段,如果aSIGSEGV是由sigactionsa_sigaction一起处理的写操作引起的,我们将能够使用siginfo_tsi_addr找到故障发生的地址。但是有没有办法找到数据和试图写入的数据的长度?
我之所以这么做,是因为我在为我的项目尝试一种写拷贝机制。

最佳答案

您找不到进程试图写入的数据,询问其大小也没有意义。如果你能得到数据,那就意味着内核已经把它复制到了某个地方。
你会在整个页面上得到一个SIGSEGV。也就是说,不管进程正在写入的数据是什么,每页都会有一个错误——第一次尝试写入一个字节时。所以你要做的就是:
跟踪页面状态
根据需要增加权限

关于linux - Linux中的mprotect,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9273891/

10-10 19:41