我不知道
VirtualQueryLinux上的等效功能。但是,其他可行或不可行的方法是:
您设置了捕获SIGBUS / SIGSEGV的信号处理程序,然后继续进行读取或写入。如果内存受到保护,则将调用您的信号捕获代码。如果不是,则不调用您的信号捕获代码。无论哪种方式,您都会赢。
您可以在每次调用时进行跟踪,
mprotect
并建立相应的数据结构,以帮助您了解某个区域是否受读或写保护。如果您可以访问所有使用的代码,那么这很好mprotect
。mprotect
通过将代码与重新定义函数的库链接起来,可以监视过程中的所有调用mprotect
。然后,您可以构建必要的数据结构,以了解某个区域是否受到读或写保护,然后调用系统mprotect
以真正设置保护。您可以尝试使用
/dev/inotify
和监视文件/proc/self/maps
中的任何更改。我想这是行不通的,但值得尝试。



