首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法访问地址处的内存- RISCV gdb/Linux无KSLR

无法访问地址处的内存- RISCV gdb/Linux无KSLR
EN

Stack Overflow用户
提问于 2020-06-16 03:39:52
回答 1查看 455关注 0票数 0

我正在为RISC-V架构开发一个定制的Linux内核。现在我正在使用GDB/QEMU进行调试,因为这些工具已经可用。当我在调试时,我注意到我不能访问虚拟化地址的内存。也就是说,一旦内核中的内存从物理寻址转换为虚拟寻址,我就不能再在gdb中访问这些内存位置。例如,内核在QEMU的info mem命令中如下所示。

代码语言:javascript
复制
paddr: 0x80200000 --> vaddr: 0xffffffff80000000

我认为这个问题更多的是QEMU的问题,或者可能是我对如何在QEMU中正确访问它的理解。在我的内核中,单步执行到开始使用虚拟内存的这一点是可以的,但是超过这一步会导致QEMU有效地停止--它在每一步都给出相同的指令。但是,如果我继续,它将在QEMU中引导。我如何通过单步执行来调试它?在GDB/QEMU中有什么需要切换的吗?

例如,我确实尝试过访问地址0xffffffff8000007c,但我可以成功地访问它,当我单步超过该点时,QEMU不会转换到虚拟内存。

EN

回答 1

Stack Overflow用户

发布于 2021-02-11 02:11:52

我遇到了一个类似的问题,并形成了以下假设:我认为内核在空闲时正在切换到一个精简的页表,一个不映射已加载模块内存的页表。当然,GDB的异步中断很可能会在空闲时中断CPU。

单个跳出空闲(例如,在Linux控制台中按下一个键之后)并重新尝试在加载的模块上设置断点在某一时刻成功。

一种可行的策略可能是在模块加载代码结束时中断,并在该点设置相关断点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62395719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档