我正在使用内核堆栈的esp
值来计算进程描述符指针值。 根据ULK书,我只需要屏蔽esp
的13个最低有效位,以获得thread_info
结构的基地址。 我的测试是:进程描述符指针与Linux内核中的当前宏不匹配
- 编写内核模块,因为我需要的内核堆栈
- 的值在内核初始化函数,得到的内核堆栈
- 使用的值下面的公式来获取进程描述符运行在CPU上的进程的指针:
*((unsigned int*) esp & 0xffffe000)
- 使用当前宏,打印出其值。
我认为第3步的价值应该是同步骤4
的价值,但我的实验结果表明:有时他们是相同的,有时它们是不同的。有没有解释为什么?或者我错过了什么?
[Kernelnewbies描述了current()是如何工作的](http://kernelnewbies.org/FAQ/current),可能会有所帮助。 – sarnold