我正在使用內核堆棧的esp
值來計算進程描述符指針值。 根據ULK書,我只需要屏蔽esp
的13個最低有效位,以獲得thread_info
結構的基地址。 我的測試是:進程描述符指針與Linux內核中的當前宏不匹配
- 編寫內核模塊,因爲我需要的內核堆棧
- 的值在內核初始化函數,得到的內核堆棧
- 使用的值下面的公式來獲取進程描述符運行在CPU上的進程的指針:
*((unsigned int*) esp & 0xffffe000)
- 使用當前宏,打印出其值。
我認爲第3步的價值應該是同步驟4
的價值,但我的實驗結果表明:有時他們是相同的,有時它們是不同的。有沒有解釋爲什麼?或者我錯過了什麼?
[Kernelnewbies描述了current()是如何工作的](http://kernelnewbies.org/FAQ/current),可能會有所幫助。 – sarnold