关于win7 32位输出IDT中断服务描述表的疑问
今天简单写了一段代码void ShowIDTInfo(){
IDTINFOR idt_info;
IDTENTRY* idt_entries;
unsigned long count;
__asm sidtidt_info;
idt_entries = (IDTENTRY*)MAKELONG(idt_info.LowIDTbase, idt_info.HiIDTbase);
KdPrint(("interrupt idt_entries 0x%08X\n", idt_entries));
for (count = 0; count <= MAX_IDT_ENTRIES; count++)
{
IDTENTRY *cur_idt = &idt_entries;
unsigned long addr = 0;
addr = MAKELONG(cur_idt->LowOffset, cur_idt->HiOffset);
KdPrint(("Interrupt %d: ISR is 0x%08X\n", count, addr));
}
}
想输出ISR地址看看 然而发现一点问题 还请大牛指点一二
比如为什么序号为2的ISR地址在PCHUNT中有地址 而我写的代码打印出来地址是0x00000000
通过windbg查看IDT地址0x80b95400中ISR描述符发现序号2的对应内容00580000 00008500
按照typedef struct
{
unsigned short LowOffset;
unsigned short selector;
unsigned charunused_Io;
unsigned charsegment_type : 4;
unsigned charsystem_segment_flag : 1;
unsigned charDPL : 2;
unsigned charP : 1;
unsigned short HiOffset;
}IDTENTRY;结构解析也确实地址为0,那么我的程序显示应该是正确的。
那么问题来了 为什么会和PCHUNT不一样呢 他那个地址又是什么?怎么得到的?
另通过对比 发现凡是短选择子不是0x01的在我的程序里显示地址都是0
还请大牛指点迷津!!! XT不一定是对的,结果以WINDBG为准。
页:
[1]