无法访问 GDB 中 [vvar] 内存区域的内容?
Unable to access contents of a [vvar] memory region in GDB?
我正在 Linux 下的 GDB 中实时调试一个进程,我发现无法读取 /proc/${PID}/maps
中定义的内存区域的内容:
3aaef123000-3aaef125000 r--p 00000000 00:00 0 [vvar]
很明显,r--p
中的r
标志表明它是可读的,但是GDB总是告诉我它无法访问该内存区域的内容,例如:
warning: Unable to access <count> bytes of target memory at <address>, halting search.
[vvar]
内存区域到底是什么?为什么我不能从 GDB 读取它的内容?
编辑: 可能有助于回答问题的站外资源:
- Implementing virtual system calls - 一篇旧的(2014 年 10 月)且很可能已过时的 LWN 文章中提到了
[vvar]
部分。一半没看懂
- vvar, gup && coredump - 一个内核邮件列表线程(2015 年 3 月),关于似乎是同一个问题。也没看懂
如果有人能用更简单的术语向我解释一下,我将不胜感激。
What exactly is a [vvar] memory region?
说明here.
Why can't I read its contents from GDB?
这听起来像是内核 ptrace
实现中的错误:如果进程可以读取数据,那么进程的跟踪器(此处为 GDB)也应该如此。
但并非总是如此。例如,GDB 可以 检查进程本身无法访问的堆栈保护页(即,这是相反方向的内核错误)。
更新:
I'd appreciate it if anyone could explain this to me in simpler terms
其实没什么大不了的:为了更快的实现某些简单的系统调用(比如gettimeofday
),方便内核做一些内核数据对用户级进程可见,这就是确切它的作用:内核数据的一页(或两页)被"magically"映射到某个地址的每个进程, 并为用户进程提供了一种方法来查找该页面出现的虚拟地址。
其余大部分是不相关的实现细节。
您可能还会发现 VDSO 页面的 this explanation 很有帮助(它是关于代码而不是数据,但想法几乎相同)。
我正在 Linux 下的 GDB 中实时调试一个进程,我发现无法读取 /proc/${PID}/maps
中定义的内存区域的内容:
3aaef123000-3aaef125000 r--p 00000000 00:00 0 [vvar]
很明显,r--p
中的r
标志表明它是可读的,但是GDB总是告诉我它无法访问该内存区域的内容,例如:
warning: Unable to access <count> bytes of target memory at <address>, halting search.
[vvar]
内存区域到底是什么?为什么我不能从 GDB 读取它的内容?
编辑: 可能有助于回答问题的站外资源:
- Implementing virtual system calls - 一篇旧的(2014 年 10 月)且很可能已过时的 LWN 文章中提到了
[vvar]
部分。一半没看懂 - vvar, gup && coredump - 一个内核邮件列表线程(2015 年 3 月),关于似乎是同一个问题。也没看懂
如果有人能用更简单的术语向我解释一下,我将不胜感激。
What exactly is a [vvar] memory region?
说明here.
Why can't I read its contents from GDB?
这听起来像是内核 ptrace
实现中的错误:如果进程可以读取数据,那么进程的跟踪器(此处为 GDB)也应该如此。
但并非总是如此。例如,GDB 可以 检查进程本身无法访问的堆栈保护页(即,这是相反方向的内核错误)。
更新:
I'd appreciate it if anyone could explain this to me in simpler terms
其实没什么大不了的:为了更快的实现某些简单的系统调用(比如gettimeofday
),方便内核做一些内核数据对用户级进程可见,这就是确切它的作用:内核数据的一页(或两页)被"magically"映射到某个地址的每个进程, 并为用户进程提供了一种方法来查找该页面出现的虚拟地址。
其余大部分是不相关的实现细节。
您可能还会发现 VDSO 页面的 this explanation 很有帮助(它是关于代码而不是数据,但想法几乎相同)。