我正在Linux下使用GDB实时调试进程,但我发现无法读取/proc/${PID}/maps
中定义的内存区域的内容,如下所示:
3aaef123000-3aaef125000 r--p 00000000 00:00 0 [vvar]
显然,
r--p
中的r
标志表示它是可读的,但是GDB总是告诉我无法访问该内存区域的内容,例如:
警告:无法在<address>处访问<count>字节的目标内存,停止搜索。
[vvar]
内存区域到底是什么?为什么我不能从GDB中读取它的内容?
编辑:可能有助于回答问题的外部资源:
- 实现虚拟系统调用 - 一篇旧的(2014年10月)和很可能已过时的LWN文章提到了
[vvar]
部分。没有理解其中的一半。 - vvar,gup && coredump - 一个内核邮件列表线程(2015年3月),讨论似乎是相同问题。也没有理解。
如果有人能以更简单的方式向我解释这个问题,我将不胜感激。