进程描述符存放在大小为8k的进程栈的顶部(低地址, intel系统中栈是由高地址向低地址伸展的). 而esp寄存器存放着当前进程的栈基址. 所以将esp中的指针的低13位(8k)清零即可得到当前进程描述符的地址.
把嵌入汇编写成AT&T汇编如下:
movl $0xffffe000 %ecx
andl %esp %ecx
movl %ecx current
Linux内核中GET_CURRENT()函数
最新推荐文章于 2023-10-24 22:21:25 发布
进程描述符存放在大小为8k的进程栈的顶部(低地址, intel系统中栈是由高地址向低地址伸展的). 而esp寄存器存放着当前进程的栈基址. 所以将esp中的指针的低13位(8k)清零即可得到当前进程描述符的地址.
把嵌入汇编写成AT&T汇编如下:
movl $0xffffe000 %ecx
andl %esp %ecx
movl %ecx current