如何在linux中打印进程的pgd和stack_start值?

时间:2013-10-28 02:45:07

标签: c process linux-kernel

我正在尝试打印进程pgd和start_stack值,但是当我从每个进程的mm指针读取值时,我遇到了问题。最终目标是创建一个LKM,它将遍历流程并打印标题,pgd,stack_start和stack_canary值。我有一种感觉,我需要锁定一些东西才能查看mm数据,但我无法找到我需要做的事情。任何正确方向的帮助都会非常有帮助。以下代码读取进程信息:

      void read_proc(){

  struct task_struct *p;
  struct mm_struct *mm;
  int len = 0;

  for_each_process(p) {
    task_lock(p);
    mm = p->mm;
    down_write(&mm->mmap_sem);
    printk(KERN_INFO "Proc Q4: Name: %s Stack Canary: 0x%X Start Stack: 0x%X PGD:
    0x%X\n",p->comm,p->stack_canary, mm->start_stack), mm->pgd->pgd);
    up_write(&mm->mmap_sem);
    task_unlock(p);
  }

}

1 个答案:

答案 0 :(得分:0)

并非进程列表中的每个进程都有一个mm结构。在尝试引用这些值之前,尝试测试mm是否为null。

P.S。 CPSC 457作业?