linux-无法访问GDB中[vvar]内存区域的内容?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux-无法访问GDB中[vvar]内存区域的内容?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1420字,纯文字阅读大概需要3分钟。
内容图文
![linux-无法访问GDB中[vvar]内存区域的内容?](/upload/InfoBanner/zyjiaocheng/947/7ba75860d4ed485d9344d593939eb629.jpg)
我正在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),内核使一些内核数据对用户级进程可见是很方便的,而这正是它的作用:内核数据的页面(或两个)“神奇地”映射到每个进程的某个地址,并且为用户进程提供了一种方法来查找该页面出现的虚拟地址.
其余大部分与实现细节无关.
您可能还会发现VDSO页面的this explanation很有帮助(这与代码有关,而不是数据有关,但是思想基本相同).
内容总结
以上是互联网集市为您收集整理的linux-无法访问GDB中[vvar]内存区域的内容?全部内容,希望文章能够帮你解决linux-无法访问GDB中[vvar]内存区域的内容?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。