Linux内核中GET_CURRENT()函数

进程描述符存放在大小为8k的进程栈的顶部(低地址, intel系统中栈是由高地址向低地址伸展的). 而esp寄存器存放着当前进程的栈基址. 所以将esp中的指针的低13位(8k)清零即可得到当前进程描述符的地址.

把嵌入汇编写成AT&T汇编如下:
movl $0xffffe000 %ecx
andl %esp %ecx
movl %ecx current


版权声明:本文为do2jiang原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。