gpt4 book ai didi

linux-kernel - 进程描述符指针与 Linux 内核中的当前宏不匹配

转载 作者:行者123 更新时间:2023-12-04 04:48:47 25 4
gpt4 key购买 nike

我正在使用 esp内核堆栈的值来计算进程描述符指针值。
根据 ULK 书,我只需要屏蔽 esp 的 13 个最低有效位获取 thread_info 的基地址结构体。
我的测试是:

  • 写一个内核模块,因为我需要获取内核堆栈的值
  • 在内核init函数中,获取内核栈
  • 的值
  • 使用以下公式获取CPU上运行的进程的进程描述符指针:*((unsigned int*) esp & 0xffffe000)
  • 使用当前宏,打印出它的值。

  • 我认为 step3 的值应该与 step 4 的值相同。

    但我的实验结果表明:有时它们相同,有时它们不同。有谁能解释为什么?还是我错过了什么?

    最佳答案

    这是因为在内核堆栈的底部,您会发现 struct thread_info实例(取决于平台)和 不是 一个 struct task_struct . current()宏提供指向当前 task_struct 的指针.

    尝试以下操作:

    struct thread_info *info = (struct thread_info*)(esp & 0xfffe000);
    struct task_struct *my_current = info->task;

    现在你可以比较 my_currentcurrent() .

    关于linux-kernel - 进程描述符指针与 Linux 内核中的当前宏不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7655907/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com