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

标签 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);
  }

}

最佳答案

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

附注CPSC 457 作业?

关于c - 如何在linux中打印进程的pgd和stack_start值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19626436/

相关文章:

python - 如何获取进程的祖 parent ID

c# - 取消长时间操作的最佳方法是什么?

c - 在 Linux 内核函数中的缓冲区中查找子字符串

c - 在两个模块之间共享 sizeof(array)

node.js - 如何判断生成的进程何时空闲

linux - SIGSTOP 在 Linux 内核中是如何工作的?

c - 类型 'ssize_t' 无法解析 eclipse cdt

c - C 中的 "str"- "str"如何工作?它们是如何存储的?

c - 在 C 中使用静态数组声明分配动态数组?

C中变量的条件转换