news 2026/7/10 15:14:09

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/10 7:50:23

超实用 U 盘启动盘制作教程:2 种工具 + 详细步骤,小白也能上手

U 盘启动盘是电脑应急必备工具&#xff0c;不管是系统崩溃重装、丢失数据抢救&#xff0c;还是硬件故障排查&#xff0c;都能派上大用场。下面分享 2 款常用工具的制作方法&#xff0c;步骤精简易懂&#xff0c;新手也能快速掌握。 一、U 盘启动盘的核心作用 系统重装&#x…

作者头像 李华
网站建设 2026/7/10 7:26:05

R语言实现流动性覆盖率(LCR)动态监控(附完整代码)

第一章&#xff1a;流动性覆盖率&#xff08;LCR&#xff09;与金融风险管理流动性覆盖率&#xff08;Liquidity Coverage Ratio, LCR&#xff09;是巴塞尔协议III中引入的关键监管指标&#xff0c;旨在衡量金融机构在压力情景下能否依靠高流动性资产满足未来30天的净现金流出。…

作者头像 李华
网站建设 2026/7/10 3:28:15

刷到 “网安月薪 3 万” 就心动?先打住!这 4 个坑一定要绕开!

前几天收到个私信&#xff0c;大二学生说 “跟风报了网安培训班&#xff0c;学了半年只会跑 Nessus 扫漏洞&#xff0c;投简历全石沉大海”—— 其实不是他学得差&#xff0c;是一开始就踩了入行误区。 现在网上的说法&#xff0c;很容易让人脑子一热就扎进来&#xff0c;但真…

作者头像 李华