如何在linux内核的每个任务中导出CPU寄存器信息?

时间:2014-05-29 08:04:16

标签: linux-kernel

我有指向Linux内核中每个任务的任务结构的指针,现在我如何为每个任务派生CPU寄存器值(eax或rax),假设任务现在没有运行?

2 个答案:

答案 0 :(得分:2)

task_pt_regs(task)提供指向已保存寄存器块的指针。它们始终位于任务内核堆栈区域的顶部。在执行任务时,内核堆栈区域基本上是“空的”。当执行系统调用(或由于其他原因输入内核)时,执行“系统条目”代码(对于x86,这是在arch / x86 / kernel / entry_ {32,64} .S)。构造pt_regs结构以匹配在条目代码中完成的寄存器保存的顺序。

答案 1 :(得分:0)

在task_struct结构中有一个名为thread_struct的字段。您可以使用它来获取CPU特定状态。

/* CPU-specific state of this task */
        struct thread_struct thread;