Я использую значение esp
стека ядра для вычисления значения указателя дескриптора процесса.
Согласно книге ULK, мне просто нужно замаскировать 13 младших битов esp
, чтобы получить базовый адрес структуры thread_info
.
Мой тест:
- написать модуль ядра, потому что мне нужно получить значение стека ядра
- В функции инициализации ядра получить значение стека ядра
- Используйте следующую формулу, чтобы получить указатель дескриптора процесса, запущенного на CPU:
*((unsigned int*) esp & 0xffffe000)
- использовать текущий макрос, распечатать его значение.
Я думаю, что значение шага 3 должно совпадать со значением шага 4.
Но результаты моего эксперимента показывают: иногда они одинаковы, а иногда различны. Может ли кто-нибудь объяснить, почему? Или я что-то упустил?