c9080 发表于 2016-8-5 23:05:24

关于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
还请大牛指点迷津!!!

Tesla.Angela 发表于 2016-8-6 07:48:20

XT不一定是对的,结果以WINDBG为准。
页: [1]
查看完整版本: 关于win7 32位输出IDT中断服务描述表的疑问