push 0
push ebp
push ebx
push esi
push edi
push KGDT_R3_TEB + RPL_MASK
mov ebx,PCR[KPCR_SELF]
mov esi,[ebx + KPCR_CURRENT_THREAD]
push [ebx + KPC_EXCEPTION_LIST]
mov dword ptr [ebx + KPCR_EXCEPTION_LIST],-1
mov ebp,[esi + KTHREAD_INITIAL_STACK]
push UserMode
sub esp,0x48
sub ebp,0x29C
mov byte ptr[esi + KTHREAD_PREVIOUS_MODE],UserMode
cmp ebp,esp
jnz BadStack
add dword ptr [ebp + KTRAP_FRAME_DR7],0
test byte ptr[esi + KTHREAD_DEBUG_ACTIVE],0xFF
mov [esi + KTHREAD_TRAP_FRAME],ebp
jnz Dr_&Label
Dr_&Label:
SET_TF_DEBUG_HEADER
sti
本文介绍了一个内核级线程上下文切换的过程,包括寄存器保存、异常列表更新、堆栈检查等关键步骤。通过汇编指令详细展示了如何从用户模式进入内核模式,并准备线程的trap frame。

1050

被折叠的 条评论
为什么被折叠?



