debugging - ARM Gdb 在处理器模式更改时中断

标签 debugging linux-kernel gdb arm

我目前正在调试 Linux ARM 内核,并且一直想知道 gdb 是否有可能在 cpu 模式更改(usr、svc、abt 等)时中断。目前,当我不确定我们处于哪种模式时,我通常必须多次查看 psr 寄存器,但也许有更有效的方法,例如模式更改时中断?

我知道我可以在异常向量上放置断点,但这意味着我只能检测到特权模式的模式更改,而不是相反。也许有一个命令来检查 psr 是否更改为 0x10(usr 模式)?

谢谢

最佳答案

所有进程都安排在entry-common.S中.该文件有一个名为 arch_ret_to_user 的宏。将其定义为 BKPT 指令,可能以通过 /proc 的全局集为条件。

您通常无法单独使用 CPU 检测到用户模式的切换(您需要支持代码),因为主管代码可以更改任何内容ETM如果您的 CPU 具有该功能,可能会有一些方法。

还有thread_nofity.h它具有重新安排用户任务时的回调。如果您不需要调试器或在 null(){} 函数上放置一些断点,您可以使用您自己的逻辑 Hook 它,您仅在以下情况下从通知程序调用该函数条件是指。

关于debugging - ARM Gdb 在处理器模式更改时中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13759583/

相关文章:

java - 如何使用JDEE环境在Emacs中调试ImageJ插件?

java - 启动时调试 java 应用程序

Android Studio 的调试器不会在库模块中的断点处停止

c - 这段代码会导致内核级内存泄漏,这和用户态内存泄漏有什么区别

linux - proc stats如何运作

c++ - 自己调用拷贝构造函数

c++ - 内存转储分析(应用挂起)

debugging - 检查 lldb 中函数的返回值

c - gdb - 在 Ubuntu 14.04 上加载内核模块

c - 在C中查找 "double free or corruption (out):"的原因