news 2026/4/16 16:05:22

hal!KfRaiseIrql函数分析之对应的汇编代码和调试分析把0xffmov给APIC[LU_TPR]后irql=30

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
hal!KfRaiseIrql函数分析之对应的汇编代码和调试分析把0xffmov给APIC[LU_TPR]后irql=30

hal!KfRaiseIrql函数分析之对应的汇编代码和调试分析把0xffmov给APIC[LU_TPR]后irql=30

第一部分:对应的汇编代码

cPublicFastCall KfRaiseIrql,1
cPublicFpo 0,0

movzx edx, cl ; (edx) = New Irql
movzx ecx, byte ptr _HalpIRQLtoTPR[edx] ; get TPR value for IRQL
mov eax, dword ptr APIC[LU_TPR] ; (eax) = Old Priority
mov dword ptr APIC[LU_TPR], ecx ; Write New Priority to the TPR

;
; get IRQL for Old Priority, and return it
;
shr eax, 4
movzx eax, _HalpVectorToIRQL[eax] ; (al) = OldIrql
fstRET KfRaiseIrql

fstENDP KfRaiseIrql


第二部分:

0: kd> g
Breakpoint 12 hit
nt!KeInsertQueueDpc:
80a36484 55 push ebp
0: kd> kc
#
00 nt!KeInsertQueueDpc
01 nt!KiTimerExpiration
02 nt!KiRetireDpcList
03 nt!KiIdleLoop
0: kd> p
nt!KeInsertQueueDpc+0x8:
80a3648c 8b7d08 mov edi,dword ptr [ebp+8]
0: kd> bp nt!KeRaiseIrql
breakpoint 11 redefined
0: kd> p
nt!KeInsertQueueDpc+0x30:
80a364b4 b11f mov cl,1Fh
0: kd> t
hal!KfRaiseIrql:
804edbd8 0fb6d1 movzx edx,cl
0: kd> pr
eax=00000013 ebx=ba9ae708 ecx=0000001f edx=0000001f esi=ba9ae728 edi=ba9ae708
eip=804edbdb esp=80b14580 ebp=80b14598 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
hal!KfRaiseIrql+0x3:
804edbdb 0fb68ab8db4e80 movzx ecx,byte ptr hal!HalpIRQLtoTPR (804edbb8)[edx] ds:0023:804edbd7=ff

0: kd> db 804edbb8
804edbb8 00 3d 41 41 51 61 71 81-91 a1 b1 b1 b1 b1 b1 b1 .=AAQaq.........
804edbc8 b1 b1 b1 b1 b1 b1 b1 b1-b1 b1 b1 c1 d1 e1 efff................
804edbd8 0f b6 d1 0f b6 8a b8 db-4e 80 a1 80 00 fe ff 89 ........N.......
804edbe8 0d 80 00 fe ff c1 e8 04-0f b6 80 1c a2 4f 80 c3 .............O..
804edbf8 8b 15 80 00 fe ff c7 05-80 00 fe ff 41 00 00 00 ............A...
804edc08 c1 ea 04 0f b6 82 1c a2-4f 80 c3 90 8b 15 80 00 ........O.......
804edc18 fe ff c7 05 80 00 fe ff-c1 00 00 00 c1 ea 04 0f ................
804edc28 b6 82 1c a2 4f 80 c3 90-33 c0 8a c1 8b 0d 80 00 ....O...3.......

0: kd> p
eax=00000013 ebx=ba9ae708 ecx=000000ff edx=0000001f esi=ba9ae728 edi=ba9ae708
eip=804edbe2 esp=80b14580 ebp=80b14598 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
hal!KfRaiseIrql+0xa:
804edbe2 a18000feffmov eax,dword ptr ds:[FFFE0080h]ds:0023:fffe0080=000000ff
0: kd> p
eax=000000c1 ebx=ba9ae708ecx=000000ffedx=0000001f esi=ba9ae728 edi=ba9ae708
eip=804edbe7 esp=80b14580 ebp=80b14598 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
hal!KfRaiseIrql+0xf:
804edbe7 890d8000feffmov dword ptr ds:[0FFFE0080h],ecxds:0023:fffe0080=000000ff
0: kd> p
eax=000000c1 ebx=ba9ae708 ecx=000000ff edx=0000001f esi=ba9ae728 edi=ba9ae708
eip=804edbed esp=80b14580 ebp=80b14598 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
hal!KfRaiseIrql+0x15:
804edbed c1e804 shr eax,4
0: kd> !irql
Debugger saved IRQL for processor 0x0 -- 30 (POWER_LEVEL)
0: kd> p
eax=0000000c ebx=ba9ae708 ecx=000000ff edx=0000001f esi=ba9ae728 edi=ba9ae708
eip=804edbf0 esp=80b14580 ebp=80b14598 iopl=0 nv up ei pl nz na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000206
hal!KfRaiseIrql+0x18:
804edbf0 0fb6801ca24f80 movzx eax,byte ptr hal!_HalpVectorToIRQL (804fa21c)[eax] ds:0023:804fa228=1b

0: kd> p
eax=0000001b ebx=ba9ae708 ecx=000000ff edx=0000001f esi=ba9ae728 edi=ba9ae708
eip=804edbf7 esp=80b14580 ebp=80b14598 iopl=0 nv up ei pl nz na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000206
hal!KfRaiseIrql+0x1f:
804edbf7 c3 ret
0: kd> p
eax=0000001b ebx=ba9ae708 ecx=000000ff edx=0000001f esi=ba9ae728 edi=ba9ae708
eip=80a364bc esp=80b14584 ebp=80b14598 iopl=0 nv up ei pl nz na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000206
nt!KeInsertQueueDpc+0x38:
80a364bc 8845ff mov byte ptr [ebp-1],al ss:0010:80b14597=00
0: kd> !irql
Debugger saved IRQL for processor 0x0 -- 29 (IPI_LEVEL)

第三部分:参考

0: kd> !idt

Dumping IDT: 8003f400

54cb784900000037: 804ed194 hal!PicSpuriousService37
54cb78490000003d: 804ee7d8 hal!HalpApcInterrupt
54cb784900000041: 804ee618 hal!HalpDispatchInterrupt
54cb784900000050: 804ed26c hal!HalpApicRebootService
54cb784900000062: 8997dadc atapi!IdePortInterrupt (KINTERRUPT 8997daa0)

54cb784900000063: 89769044 NDIS!ndisMIsr (KINTERRUPT 89769008)

54cb784900000073: 89a98bec USBPORT!USBPORT_InterruptService (KINTERRUPT 89a98bb0)

54cb784900000082: 89c3fbec atapi!IdePortInterrupt (KINTERRUPT 89c3fbb0)

54cb784900000083: 8991abec SCSIPORT!ScsiPortInterrupt (KINTERRUPT 8991abb0)

USBPORT!USBPORT_InterruptService (KINTERRUPT 89bce008)

54cb784900000092: 8998e7a4 serial!SerialCIsrSw (KINTERRUPT 8998e768)

54cb784900000093: 898e94cc i8042prt!I8042KeyboardInterruptService (KINTERRUPT 898e9490)

54cb7849000000a3: 89ce2bec i8042prt!I8042MouseInterruptService (KINTERRUPT 89ce2bb0)

54cb7849000000b1: 89d394d4 ACPI!ACPIInterruptServiceRoutine (KINTERRUPT 89d39498)

54cb7849000000c1: 804ed408 hal!HalpBroadcastCallService
54cb7849000000d1: 804ec714 hal!HalpClockInterrupt
54cb7849000000e1: 804ed83c hal!HalpIpiHandler
54cb7849000000e3: 804ed650 hal!HalpLocalApicErrorService
54cb7849000000fd: 804edde8 hal!HalpProfileInterrupt
54cb7849000000fe: 804edfa0 hal!HalpPerfInterrupt

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

介观交通流仿真软件:Aimsun Next_(19).AimsunNext的新特性与更新

AimsunNext的新特性与更新 在这一节中,我们将详细介绍Aimsun Next的最新特性与更新,这些新特性不仅提高了软件的性能,还扩展了其在交通流仿真领域的应用范围。我们将从以下几个方面进行探讨:改进的用户界面增强的交通模型新的数据…

作者头像 李华
网站建设 2026/4/16 14:12:42

iOS App 测试的工程化实践,多工具协同的一些尝试

在实际研发流程中,iOS App 测试 已经不再是“点点页面、跑跑用例”的单一环节,而是一项贯穿 开发、集成、发布、回归与线上验证 的系统工程。 随着 App 规模扩大、业务复杂度提升以及混合技术(Native Flutter uni-app WebView)…

作者头像 李华
网站建设 2026/4/15 3:33:04

Vision Studio C#中属性set和get访问器、构造函数、析构函数的应用和介绍

属性set和get访问器属性的命名:public int Age { get; set; }, 特点: 它一般不存储数据,可以公开接口 也可以在外部进行访问 字段:private私有的 int age 字段可以存储数据,一般定义成私有的 目的是保证数据的安全性set和get访问器的区别如果对类里面的字…

作者头像 李华