news 2026/7/7 11:51:10

hal!HalEndSystemInterrupt函数分析之汇编代码和调试分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
hal!HalEndSystemInterrupt函数分析之汇编代码和调试分析

hal!HalEndSystemInterrupt函数分析之汇编代码和调试分析

LOCALAPIC equ 0fffe0000h
APIC equ ds:[LOCALAPIC]
LU_EOI equ 000000B0H ;


第一部分:

HeiNewIrql equ [esp + 4]
HeiVector equ [esp + 8]

cPublicProc _HalEndSystemInterrupt ,2
cPublicFpo 2, 0
xor ecx,ecx
mov cl, byte ptr HeiNewIrql ; get new IRQL
mov cl, _HalpIRQLtoTPR[ecx] ; get corresponding TPR value

mov dword ptr APIC[LU_EOI], 0 ; send EOI to APIC local unit
APICFIX edx

cmp cl, DPC_VECTOR ; Is new irql < DPC?
jc short es10 ; Yes, go check for pending DPC

es05: mov dword ptr APIC[LU_TPR], ecx ; Set new Priority

;
; We have to ensure that the requested priority is set before
; we return. The caller is counting on it.
;
mov edx, dword ptr APIC[LU_TPR]
CHECKTPR ecx, edx
stdRET _HalEndSystemInterrupt

es10: cmp PCR[PcHal.DpcPending], 0 ; Is a DPC pending?
mov PCR[PcHal.ShortDpc], 0 ; Clear short dpc flag
jz short es05 ; No, eoi

mov dword ptr APIC[LU_TPR], DPC_VECTOR ; lower to DPC level
APICFIX edx

push ebx ; Save EBX (used by KiDispatchInterrupt)
push ecx ; Save OldIrql
cPublicFpo 2, 2

sti

es20: mov PCR[PcHal.DpcPending], 0 ; Clear pending flag

stdCall _KiDispatchInterrupt ; Dispatch interrupt

cli

pop ecx
pop ebx
jmp short es05

stdENDP _HalEndSystemInterrupt

第二部分:

0: kd> g
Breakpoint 21 hit
eax=0002625a ebx=00000000 ecx=80b18af8 edx=00000349 esi=80affb51 edi=80b00720
eip=804ee8d0 esp=f78cdee8 ebp=f78cdef4 iopl=0 nv up di pl nz na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000006
hal!HalEndSystemInterrupt:
804ee8d0 33c9 xor ecx,ecx

0: kd> kc 3
#
00 hal!HalEndSystemInterrupt
01 nt!KeUpdateSystemTime
02 nt!KiDispatchInterrupt
0: kd> !irql
Debugger saved IRQL for processor 0x0 -- 29 (IPI_LEVEL)
0: kd> p
eax=0002625a ebx=00000000 ecx=00000000 edx=00000349 esi=80affb51 edi=80b00720
eip=804ee8d2 esp=f78cdee8 ebp=f78cdef4 iopl=0 nv up di pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000046
hal!HalEndSystemInterrupt+0x2:
804ee8d2 8a4c2404 mov cl,byte ptr [esp+4] ss:0010:f78cdeec=02
0: kd> p
eax=0002625a ebx=00000000 ecx=00000002 edx=00000349 esi=80affb51 edi=80b00720
eip=804ee8d6 esp=f78cdee8 ebp=f78cdef4 iopl=0 nv up di pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000046
hal!HalEndSystemInterrupt+0x6:
804ee8d6 8a89b8db4e80 mov cl,byte ptr hal!HalpIRQLtoTPR (804edbb8)[ecx] ds:0023:804edbba=41
0: kd> p
eax=8949c5d8 ebx=b9e46854 ecx=8948b5a8 edx=e14b45a0 esi=b9e46864 edi=f7142e24
eip=804ee934 esp=b9e465dc ebp=b9e465f4 iopl=0 nv up di ng nz ac po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000092
hal!HalBeginSystemInterrupt:
804ee934 33c0 xor eax,eax

1: kd> g
Single step exception - code 80000004 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=0002625a ebx=00000000 ecx=00000041 edx=00000349 esi=80affb51 edi=80b00720
eip=804ee8dc esp=f78cdee8 ebp=f78cdef4 iopl=0 nv up di pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000046
hal!HalEndSystemInterrupt+0xc:
804ee8dc c705b000feff00000000mov dword ptr ds:[0FFFE00B0h],0ds:0023:fffe00b0=00000000
0: kd> p
eax=0002625a ebx=00000000 ecx=00000041 edx=00000349 esi=80affb51 edi=80b00720
eip=804ee8e6 esp=f78cdee8 ebp=f78cdef4 iopl=0 nv up di pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000046
hal!HalEndSystemInterrupt+0x16:
804ee8e6 80f941 cmp cl,41h
0: kd> p
eax=0002625a ebx=00000000 ecx=00000041 edx=00000349 esi=80affb51 edi=80b00720
eip=804ee8e9 esp=f78cdee8 ebp=f78cdef4 iopl=0 nv up di pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000046
hal!HalEndSystemInterrupt+0x19:
804ee8e9 7214 jb hal!HalEndSystemInterrupt+0x2f (804ee8ff) [br=0]
0: kd> p
eax=0002625a ebx=00000000 ecx=00000041 edx=00000349 esi=80affb51 edi=80b00720
eip=804ee8eb esp=f78cdee8 ebp=f78cdef4 iopl=0 nv up di pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000046
hal!HalEndSystemInterrupt+0x1b:
804ee8eb 890d8000feff mov dword ptr ds:[0FFFE0080h],ecx ds:0023:fffe0080=000000ff
0: kd> p
eax=0002625a ebx=00000000 ecx=00000041 edx=00000349 esi=80affb51 edi=80b00720
eip=804ee8f1 esp=f78cdee8 ebp=f78cdef4 iopl=0 nv up di pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000046
hal!HalEndSystemInterrupt+0x21:
804ee8f1 8b158000feff mov edx,dword ptr ds:[0FFFE0080h] ds:0023:fffe0080=000000ff
0: kd> p
eax=0002625a ebx=00000000 ecx=00000041 edx=00000041 esi=80affb51 edi=80b00720
eip=804ee8f7 esp=f78cdee8 ebp=f78cdef4 iopl=0 nv up di pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000046
hal!HalEndSystemInterrupt+0x27:
804ee8f7 3bca cmp ecx,edx
0: kd> p
eax=0002625a ebx=00000000 ecx=00000041 edx=00000041 esi=80affb51 edi=80b00720
eip=804ee8fc esp=f78cdee8 ebp=f78cdef4 iopl=0 nv up di pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000046
hal!HalEndSystemInterrupt+0x2c:
804ee8fc c20800 ret 8
0: kd> p
Breakpoint 23 hit
eax=0002625a ebx=00000000 ecx=00000041 edx=00000041 esi=80affb51 edi=80b00720
eip=80affb5d esp=f78cdef4 ebp=f78cdef4 iopl=0 nv up di pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000046
nt!KeUpdateSystemTime+0x135:
80affb5d e926cbffff jmp nt!KiExceptionExit (80afc688)
0: kd> !irql
Debugger saved IRQL for processor 0x0 -- 2 (DISPATCH_LEVEL)

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

第8篇 | 流量的“密语”:网络监听与中间人攻击的全景解析

《网络安全的攻防启示录》 第一篇章:破壁之术 第8篇 “你以为你在跟服务器说悄悄话,其实全世界都在听广播。” 想象这样一个场景:周末的午后,你坐在星巴克里,连上了店里的免费 Wi-Fi,点了一杯拿铁,顺手打开手机银行给房东转了房租,又登录公司邮箱回了几封紧急邮件。一…

作者头像 李华
网站建设 2026/7/7 9:24:37

技术升职加薪路上总卡点怎么办?

在职场和技术成长的路上&#xff0c;你是否遇到这些困扰&#xff1a; 想去海外发展&#xff0c;却不知道机会与挑战如何权衡团队里有“技术刺头”&#xff0c;管理难度大测试架构设计一头雾水&#xff0c;不知道从哪个维度下手算法测试、质量大盘建设等知识多但不知如何落地学…

作者头像 李华
网站建设 2026/7/7 10:45:55

CSS伪类及伪元素:一篇搞懂

文章目录一、 伪类&#xff08;Pseudo-classes&#xff09;1.链接伪类2.用户行为伪类3.结构伪类选择器4.表单伪类二、伪元素&#xff08;Pseudo-elements&#xff09;三、核心区别一、 伪类&#xff08;Pseudo-classes&#xff09; 伪类用于选择处于特定状态的元素&#xff0c…

作者头像 李华
网站建设 2026/7/6 22:56:30

【Dify内存管理实战】:应对加密PDF高负载解析的7种降耗策略

第一章&#xff1a;加密 PDF 解析的 Dify 内存占用在处理加密 PDF 文件时&#xff0c;Dify 平台因需执行解密、内容提取与语义分析等多阶段操作&#xff0c;容易引发显著的内存占用问题。尤其当批量解析高页数或强加密的 PDF 文档时&#xff0c;Java 虚拟机&#xff08;JVM&…

作者头像 李华
网站建设 2026/7/7 10:19:31

Docker网络配置踩坑实录,90%工程师都忽略的Agent通信细节

第一章&#xff1a;Docker网络配置踩坑实录&#xff0c;90%工程师都忽略的Agent通信细节在微服务架构中&#xff0c;Docker容器间的网络通信是系统稳定运行的关键。然而&#xff0c;许多工程师在部署监控Agent或日志采集器时&#xff0c;常因网络模式配置不当导致数据无法上报。…

作者头像 李华