在内核中查找进程的程序计数器

时间:2014-09-25 05:05:06

标签: c linux linux-kernel arm program-counter

我正在尝试跟踪内核中特定进程的PC值 为此,我查看了内核源代码,并发现pc存储在task_struct->stack内,为了理解堆栈,我需要将其转换为struct thread_info *
因此,在gdb中,我设置了一个断点b scheduler_tick(每隔10ms调用一次)。 但是,当我打印出p/x ((struct thread_info *)curr->stack)->cpu_context.pc时,我收到的值为$4 = 0x804d19d8

我预计PC会低于0x80000000,因为0x80000000以上的地址被配置为我内核中的内核空间。在查看内核的objdump输出后,我发现pc指向__schedule

对于我从用户空间开始的进程,PC不应该指向用户空间指令吗? 我的理解是,当一个中断被触发时,寄存器状态被保存,中断被服务,然后寄存器状态被恢复,所以程序继续,就像“没有”发生一样。

0 个答案:

没有答案