Я сейчас читаю «Разработка ядра Linux» Роберта Лава, и я не понимаю, что делает этот фрагмент сборки.
По сути, в каждом стеке ядра процесса есть struct thread_info
, который находится в конце стека. Теперь, на архитектуре x86, мы можем, по-видимому, получить это (предполагая размер стека 8 КБ), используя следующую сборку
movl $-8192, %eax
andl %esp, %eax
Таким образом, в общем случае ANDing указатель стека на 0xffffe000. Я не понимаю, что здесь происходит? Я не понимаю, почему маскирование младших значащих 13 битов %esp
приводит нас к структуре. Я знаю, что почувствую себя глупо, когда это объясню, но меня это беспокоит.
Спасибо.