手动找到系统调用中断地址

手动找到中断地址

查看当前线程PCR地址

WINDBG>!PCR
KPCR for Processor 0 at ffdff000:
    Major 1 Minor 1
    NtTib.ExceptionList: b08051b0
        NtTib.StackBase: b0805df0
       NtTib.StackLimit: b0802000
     NtTib.SubSystemTib: 00000000
          NtTib.Version: 00000000
      NtTib.UserPointer: 00000000
          NtTib.SelfTib: 7ff6b000

                SelfPcr: ffdff000
                   Prcb: ffdff120
                   Irql: 00000000
                    IRR: 00000000
                    IDR: ffffffff
          InterruptMode: 00000000
                    IDT: 8003f400 //中断描述表
                    GDT: 8003f000 //全局描述表
                    TSS: 80042000

          CurrentThread: 893619a8
             NextThread: 00000000
             IdleThread: 80553740

              DpcQueue: 

查看IDT的线性地址表

WINDBG>dq /c 1 8003f400+2e*8  //2e 中断向量号
8003f570  8053ee00`0008e481
8003f578  80548e00`00081780
8003f580  80538e00`0008db40
8003f588  80538e00`0008db4a
8003f590  80538e00`0008db54
8003f598  80538e00`0008db5e
8003f5a0  80538e00`0008db68

根据数据格式得出: 偏移 8053e481 选择器 0008

下图选择器的数据格式

图片说明

根据上图格式可以知道 在GDT的索引为1,GDT的地址在!PCR处已经获取到。为8003f000

WINDBG>dq /c 1 8003f000+1*8
8003f008  00cf9b00`0000ffff
8003f010  00cf9300`0000ffff
8003f018  00cffb00`0000ffff
8003f020  00cff300`0000ffff
图片说明

m+7、M+2~M+4组合是段基址。因此地址是0:8053e481。

快速调用

SYSENTER_CS   CS    174
SYSENTER_CS+8 SS
SYSENTER_ESP  ESP   175
SYSENTER_EIP  EIP   176

SYSENTER指令行执行CPU取出的第一条内核指令

WINDBG>rdmsr 176
msr[176] = 00000000`8053e540

接下来是段选择子

WINDBG>rdmsr 174
msr[174] = 00000000`00000008

这个前面已经算出来了,不需要另外算了。所以对应的地址在8053e540

文章目录
  1. 1. 手动找到中断地址
  2. 2. 快速调用
|