我想知道如果从内核(在本例中为 Linux)您在进程上下文(系统调用、页面错误等)中使用 PTRACE_SINGLESTEP 调用 ptrace_request 会发生什么。它会单步执行用户空间指令还是内核空间指令。我意识到 ptrace 只能执行单步用户指令,这就是为什么我对这会产生的行为感到好奇的原因。
只是为了提供更多信息,我试图从页面错误处理程序中执行此操作(单步错误的指令但更改 PTE 以便指令通过)。我想知道这是否可能,或者它是否需要另一种方法来做到这一点,例如重新安排进程运行等....
出现这种情况是因为进程的 task_struct(如果被抢占)仍将指向内核空间处理程序 IIRC,因此使用 ptrace 单步执行是否会绕过此并执行正确的用户空间指令,或者根本不执行?