news 2026/2/8 21:05:58

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/2/5 11:20:27

(视频内容检索新突破):Dify模糊匹配如何实现毫秒级响应与高召回率

第一章&#xff1a;视频字幕检索的 Dify 模糊匹配在处理多语言视频内容时&#xff0c;精确查找特定语句或片段是一项挑战。Dify 平台提供的模糊匹配能力&#xff0c;结合自然语言处理技术&#xff0c;能够有效提升字幕检索的准确率与召回率。该机制不依赖完全一致的文本匹配&am…

作者头像 李华
网站建设 2026/2/7 18:56:00

Data Agent:基于 LangChain 1.1 的智能数据分析助手

最近在折腾数据分析项目时&#xff0c;发现传统的数据分析流程往往需要反复切换工具&#xff1a;上传数据、写 Python 脚本、生成图表、分析结果。有没有一种方式能让 AI 直接理解数据并执行分析&#xff1f;基于这个需求&#xff0c;我实践了一个基于 LangChain 1.1 的智能数据…

作者头像 李华
网站建设 2026/2/4 17:14:51

仅限内部使用的监控策略:私有化Dify资源观测性实践秘籍

第一章&#xff1a;私有化 Dify 资源监控的背景与意义在企业级 AI 应用快速落地的今天&#xff0c;大模型服务平台 Dify 因其灵活的编排能力和低代码开发体验被广泛采用。然而&#xff0c;当 Dify 部署于私有化环境时&#xff0c;资源使用情况变得复杂且难以统一掌控。服务器 C…

作者头像 李华
网站建设 2026/2/2 23:55:22

打通 C++ 与 Node.js 的跨语言交互通道

这里写自定义目录标题从实际需求出发&#xff1a;为何需要 callJS&#xff1f;核心功能&#xff1a;从注册到调用的完整闭环注册回调&#xff1a;setCallBack 搭建沟通桥梁合理的创建标题&#xff0c;有助于目录的生成同步调用&#xff1a;call 实现即时交互异步调用&#xff1…

作者头像 李华
网站建设 2026/2/8 6:22:23

list类

namespace bite {// List的节点类template<class T>struct ListNode{ListNode(const T& val T()) : _pPre(nullptr), _pNext(nullptr), _val(val){}ListNode<T>* _pPre;ListNode<T>* _pNext;T _val;};//List的迭代器类template<class T, class Ref, …

作者头像 李华