news 2026/4/23 12:52:20

断点nt!KiDispatchInterrupt+0x4d可以截获CurrentThread被NextThread抢占后的线程切换的情况--server03调试记录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
断点nt!KiDispatchInterrupt+0x4d可以截获CurrentThread被NextThread抢占后的线程切换的情况--server03调试记录

第一部分:
nt!KiDispatchInterrupt+0x3b对应cmp byte ptr [ebx].PcPrcbData.PbQuantumEnd, 0 ;
如果[ebx].PcPrcbData.PbQuantumEnd=1,说明时间片用完了,会跳转调用nt!KiQuantumEnd
否则,查看NextThread是否,如果存在则把CurrentThread放到就绪队列里面,然后切换到NextThread。

;
; Check to determine if quantum end is requested.
;
; N.B. If a new thread is selected as a result of processing the quantum
; end request, then the new thread is returned with the dispatcher
; database locked. Otherwise, NULL is returned with the dispatcher
; database unlocked.
;

kdi40: sti ; enable interrupts
cmp byte ptr [ebx].PcPrcbData.PbQuantumEnd, 0 ; quantum end requested
jne kdi90 ; if neq, quantum end request

第二部分:


0: kd> g
Breakpoint 16 hit
eax=00000001 ebx=00000102 ecx=00000002 edx=00000000 esi=f7737120 edi=00000000
eip=804ee4f8 esp=f78d27e4 ebp=f78d2808 iopl=0 nv up ei pl nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000202
hal!HalRequestSoftwareInterrupt:
804ee4f8 643a0d95000000 cmp cl,byte ptr fs:[95h] fs:0030:00000095=00
1: kd> g
Breakpoint 14 hit
eax=00000041 ebx=f78d298c ecx=8999e3a0 edx=00000000 esi=00000000 edi=f71451f2
eip=80b00720 esp=f78d2890 ebp=f78d2894 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
nt!KiDispatchInterrupt:
80b00720 648b1d1c000000 mov ebx,dword ptr fs:[1Ch] fs:0030:0000001c=f7737000
1: kd> dx -id 0,0,89831250 -r1 ((basesrv!_KPRCB *)0xf7737120)
((basesrv!_KPRCB *)0xf7737120) : 0xf7737120 [Type: _KPRCB *]
[+0x000] MinorVersion : 0x1 [Type: unsigned short]
[+0x002] MajorVersion : 0x1 [Type: unsigned short]
[+0x004] CurrentThread : 0x8999e3a0 [Type: _KTHREAD *]
[+0x008] NextThread : 0x89995568 [Type: _KTHREAD *]

[+0x928] ReadySummary : 0x300 [Type: unsigned long]

1: kd> dx -id 0,0,89831250 -r1 ((basesrv!_KTHREAD *)0x89995568)
((basesrv!_KTHREAD *)0x89995568) : 0x89995568 [Type: _KTHREAD *]
[+0x000] Header [Type: _DISPATCHER_HEADER]
[+0x010] MutantListHead [Type: _LIST_ENTRY]
[+0x018] InitialStack : 0xf790b000 [Type: void *]
[+0x01c] StackLimit : 0xf7908000 [Type: void *]
[+0x020] KernelStack : 0xf790ac6c [Type: void *]
[+0x024] ThreadLock : 0x0 [Type: unsigned long]
[+0x028] ContextSwitches : 0x77 [Type: unsigned long]
[+0x02c] State : 0x3 [Type: unsigned char]

[+0x05b] Priority : 16 [Type: char]

1: kd> g
Breakpoint 45 hit
eax=00000000 ebx=f7737000 ecx=8999e3a0 edx=00000000 esi=00000000 edi=f71451f2
eip=80b0075b esp=f78d2890 ebp=f78d2894 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
nt!KiDispatchInterrupt+0x3b:
80b0075b 80bbe109000000 cmp byte ptr [ebx+9E1h],0 ds:0023:f77379e1=00
1: kd> p
eax=00000000 ebx=f7737000 ecx=8999e3a0 edx=00000000 esi=00000000 edi=f71451f2
eip=80b00762 esp=f78d2890 ebp=f78d2894 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
nt!KiDispatchInterrupt+0x42:
80b00762 7577 jne nt!KiDispatchInterrupt+0xbb (80b007db) [br=0]
1: kd> p
eax=00000000 ebx=f7737000 ecx=8999e3a0 edx=00000000 esi=00000000 edi=f71451f2
eip=80b00764 esp=f78d2890 ebp=f78d2894 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
nt!KiDispatchInterrupt+0x44:
80b00764 83bb2801000000 cmp dword ptr [ebx+128h],0 ds:0023:f7737128=89995568
1: kd> p
eax=00000000 ebx=f7737000 ecx=8999e3a0 edx=00000000 esi=00000000 edi=f71451f2
eip=80b0076b esp=f78d2890 ebp=f78d2894 iopl=0 nv up ei ng nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000282
nt!KiDispatchInterrupt+0x4b:
80b0076b 746d je nt!KiDispatchInterrupt+0xba (80b007da) [br=0]
1: kd> p
Breakpoint 48 hit
eax=00000000 ebx=f7737000 ecx=8999e3a0 edx=00000000 esi=00000000 edi=f71451f2
eip=80b0076d esp=f78d2890 ebp=f78d2894 iopl=0 nv up ei ng nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000282
nt!KiDispatchInterrupt+0x4d:
80b0076d 83ec0c sub esp,0Ch
1: kd> g
Breakpoint 38 hit
eax=00000002 ebx=f7737000 ecx=8999e3a0 edx=f7737120 esi=89995568 edi=8999e3a0
eip=80a4412e esp=f78d2880 ebp=f78d2894 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
nt!KiQueueReadyThread:
80a4412e 55 push ebp

1: kd> gu
eax=00000000 ebx=f7737000 ecx=f7737ab8 edx=f7737ab8 esi=89995568 edi=8999e3a0
eip=80b007c5 esp=f78d2884 ebp=f78d2894 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
nt!KiDispatchInterrupt+0xa5:
80b007c5 b101 mov cl,1
1: kd> dx -id 0,0,89831250 -r1 ((basesrv!_KPRCB *)0xf7737120)
((basesrv!_KPRCB *)0xf7737120) : 0xf7737120 [Type: _KPRCB *]
[+0x000] MinorVersion : 0x1 [Type: unsigned short]
[+0x002] MajorVersion : 0x1 [Type: unsigned short]
[+0x004] CurrentThread : 0x89995568 [Type: _KTHREAD *]
[+0x008] NextThread : 0x0 [Type: _KTHREAD *]

[+0x928] ReadySummary : 0x2300 [Type: unsigned long]

1: kd> dx -id 0,0,89831250 -r1 ((basesrv!_KTHREAD *)0x8999e3a0)
((basesrv!_KTHREAD *)0x8999e3a0) : 0x8999e3a0 [Type: _KTHREAD *]
[+0x000] Header [Type: _DISPATCHER_HEADER]
[+0x010] MutantListHead [Type: _LIST_ENTRY]
[+0x018] InitialStack : 0xf78d3000 [Type: void *]
[+0x01c] StackLimit : 0xf78d0000 [Type: void *]
[+0x020] KernelStack : 0xf78d28e8 [Type: void *]
[+0x024] ThreadLock : 0x0 [Type: unsigned long]
[+0x028] ContextSwitches : 0x617 [Type: unsigned long]
[+0x02c] State : 0x1 [Type: unsigned char]

[+0x113] Quantum : 7 [Type: char]

1: kd> g
Breakpoint 46 hit
eax=00000000 ebx=f7737000 ecx=f7737a01 edx=f7737ab8 esi=89995568 edi=8999e3a0
eip=80b007f0 esp=f78d2880 ebp=f78d2894 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
nt!SwapContext:
80b007f0 51 push ecx

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 0:40:10

Open-AutoGLM安全架构设计揭秘:3步实现敏感数据跨域安全流转

第一章:Open-AutoGLM 跨应用数据安全机制在分布式系统架构中,Open-AutoGLM 作为支持跨应用数据交互的智能模型引擎,其核心安全机制设计直接影响数据的完整性与机密性。为确保不同应用间的数据流通不被恶意截取或篡改,系统采用多层…

作者头像 李华
网站建设 2026/4/23 10:50:00

5、超格拉斯曼代数作为量子空间的深入探究

超格拉斯曼代数作为量子空间的深入探究 1. 基础概念与正交性分析 在超格拉斯曼代数的研究中,我们首先关注基 (A_W)。通过一系列计算,我们得到了如下重要结果: [ \begin{align } \langle\theta^a\theta^b, \theta^c\theta^d\rangle_w&=\int\int d\theta: (\theta^a…

作者头像 李华
网站建设 2026/4/23 10:49:43

7、考克斯特多面体沿镜面滚动的研究

考克斯特多面体沿镜面滚动的研究 1. 滚动示例 正二十面体群 (H_3) :该群由关于正二十面体相对棱中点连线的角平分线的反射生成。这些角平分线将 (\mathbb{R}^3) 分割成 120 个二面角为 (\frac{\pi}{2})、(\frac{\pi}{3})、(\frac{\pi}{5}) 的单纯锥。在图中,单纯锥被正二十…

作者头像 李华
网站建设 2026/4/23 12:21:55

智能学术解决方案:2025年10大支持LaTeX的AI论文生成平台

2025AI 哪个论文生成网站好?10 款含 LaTeX 模板与论文格式工具工具对比排名工具名称核心优势支持LaTeX适用场景aibiyeAIGC率降个位数,兼容知网规则是AI痕迹强处理aicheck学术改写优化,语义保留佳是格式统一化askpaper降重降AI一体&#xff0c…

作者头像 李华
网站建设 2026/4/23 12:24:45

1、量子物理基础:从早期实验到理论发展

量子物理基础:从早期实验到理论发展 1. 引言 学生在开始学习量子物理时,常常会接触到二十世纪早期的一系列实验和理论创新,这些内容揭示了当时物理学的局限性。本文将介绍一些与量子物理密切相关的早期实验和概念,为后续的学习打下基础。 2. 早期实验 2.1 光电效应 发…

作者头像 李华