首页
论坛
课程
招聘
[求助]再问一个关于IDT的问题
2009-4-27 21:42 4603

[求助]再问一个关于IDT的问题

2009-4-27 21:42
4603
IDT中的中断例程地址是就是定义的中断服务例程的地址吗?好像不是啊?

根据“从IRQ到IRQL(APIC版)”这篇文章,导出的IDT的内容中:
83: 817d2d44
(Vector:83,Irql:7,SyncIrql:7,Connected:TRUE,No:0,ShareVector:TRUE,Mode:LevelSensitive,ISR:NDIS!ndisMIsr(bff1b794))

从IDT中得到中断服务例程地址是817d2d44 ,但是ISR:NDIS!ndisMIsr(bff1b794)) ,从817d2d44怎么到达ISR:NDIS!ndisMIsr(bff1b794)) 的呢?

[注意] 欢迎加入看雪团队!base上海,招聘安全工程师、逆向工程师多个坑位等你投递!

收藏
点赞0
打赏
分享
最新回复 (4)
雪    币: 236
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
adwardwang 活跃值 2009-4-28 00:14
2
0
根据我导出的idt为:
Dumping IDT:

37: 806d0728 hal!PicSpuriousService37
3d: 806d1b70 hal!HalpApcInterrupt
41: 806d19cc hal!HalpDispatchInterrupt
50: 806d0800 hal!HalpApicRebootService
62: 83f91ce4 atapi!IdePortInterrupt (KINTERRUPT 83f91ca8)
63: 83d6c044 NDIS!ndisMIsr (KINTERRUPT 83d6c008)
73: 83f88dd4 portcls!CKsShellRequestor::`vector deleting destructor'+0x26 (KINTERRUPT 83f88d98)
USBPORT!USBPORT_InterruptService (KINTERRUPT 83cf7120)
82: 83f9148c atapi!IdePortInterrupt (KINTERRUPT 83f91450)
83: 83f94044 SCSIPORT!ScsiPortInterrupt (KINTERRUPT 83f94008)
93: 83d9f4bc i8042prt!I8042KeyboardInterruptService (KINTERRUPT 83d9f480)
a3: 83d1f15c i8042prt!I8042MouseInterruptService (KINTERRUPT 83d1f120)
b1: 83f9c894 ACPI!ACPIInterruptServiceRoutine (KINTERRUPT 83f9c858)
b2: 83d1e044 serial!SerialCIsrSw (KINTERRUPT 83d1e008)
c1: 806d0984 hal!HalpBroadcastCallService
d1: 806cfd34 hal!HalpClockInterrupt
e1: 806d0f0c hal!HalpIpiHandler
e3: 806d0c70 hal!HalpLocalApicErrorService
fd: 806d1464 hal!HalpProfileInterrupt
fe: 806d1604 hal!HalpPerfInterrupt


93:        83d9f4bc i8042prt!I8042KeyboardInterruptService (KINTERRUPT 83d9f480)
以键盘的中断为例,可以看到93号中断向量从idt中得到的地址是83d9f4bc

kd> dt_kinterrupt 83d9f480
nt!_KINTERRUPT
+0x000 Type : 22
+0x002 Size : 484
+0x004 InterruptListEntry : _LIST_ENTRY [ 0x83d9f484 - 0x83d9f484 ]
+0x00c ServiceRoutine : 0xf7614495 unsigned char i8042prt!I8042KeyboardInterruptService+0
+0x010 ServiceContext : 0x83e37620
+0x014 SpinLock : 0
+0x018 TickCount : 0xffffffff
+0x01c ActualLock : 0x83e376e0 -> 0
+0x020 DispatchAddress : 0x80541920 void nt!KiInterruptDispatch+0
+0x024 Vector : 0x193
+0x028 Irql : 0x8 ''
+0x029 SynchronizeIrql : 0x9 ''
+0x02a FloatingSave : 0 ''
+0x02b Connected : 0x1 ''
+0x02c Number : 0 ''
+0x02d ShareVector : 0 ''
+0x030 Mode : 1 ( Latched )
+0x034 ServiceCount : 0
+0x038 DispatchCount : 0xffffffff
+0x03c DispatchCode : [106] 0x56535554


可以看到实际定义的中断服务例程的地址是:ServiceRoutine   : 0xf7614495     unsigned char  i8042prt!I8042KeyboardInterruptService+0

但是83d9f4bc这个地址代表的是什么呢?和_kinterrupt 这个结构的关系是什么呢?和0xf7614495  这个实际地址的关系呢?哪位帮忙解释一下,多谢了
雪    币: 313
活跃值: 活跃值 (13)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
better 活跃值 2 2009-4-28 12:51
3
0
这个问题看看驱动的书……
雪    币: 2
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lxcsyh 活跃值 2009-11-28 22:25
4
0
83d9f4bc这个地址貌似是DispatchCode成员的地址。
具体原因不是很清楚......
雪    币: 672
活跃值: 活跃值 (101)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
FishSeeWater 活跃值 11 2009-11-28 22:57
5
0
好像是这样的:
IDT 地址是一个IDT表的起始地址,从这个地址指向的地址(表)的每4个字节指向一个胚体的服务地址。
类似二级指针。
游客
登录 | 注册 方可回帖
返回