我目前正在调试 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/