KTHREAD--InitialStack和KernelStack和TSS的esp0
InitialStack和TSS.esp0的关系,在这里可以看到
mov ecx, [esi+_KTHREAD.InitialStack] ; esi: newthread
lea eax, [ecx-210h] ; 越过FPXSAVE指令存储地址
test byte ptr [eax-1Ah], 2 ; 判断efalgs寄存器的VIF位是否为1
jnz short loc_458743
sub eax, 10h ; 修正初始化堆栈esp指针
; 如果VIF位位1,
; TSS.ESP0-->trapTfame.V86Gs
; 否则
; TSS.ESP0-->HardwareSegSs
mov edx, [ebx+_KPCR.___u0.__s1.TssCopy]
mov [edx+_KTSS.Esp0], eax ; 修改esp0!!!!!!!!!!!!!
KTHREAD.KernelStack的作用