A、反断点的一些原理
B、认识IDT表
C、IDT表相关结构
D、读出IDT表-sidt指令
E、测试
一、反断点的一些原理
1、让他不能正常下断点 (0xCC断点int 3)
2、正常下断点后,让他不能断下(IDT HOOK)
二、IDT表
大小 00-0xFF ,0-255
返回 iretd ;
中断INT n
举个简单的例子
我们常会在驱动代码里写一行_asm int 3
这样我们就手动设置了一个断点,当代码执行到这里 就会使CPU的执行暂停,并跳到中断处理函数中去执行。
同样的和SSDT与SSDT Shadow一样 IDT也有一张IDT表(俗称中断描述符表)
1、怎么样获取IDT表基址?
2、怎么样读取IDT表 中的中断函数地址?
__asm sidt idt_info
#pragma pack(push)
#pragma pack(1) //
typedef struct _IDTR //IDT基址
{
USHORT limit; //范围 占8位
ULONG base; //基地址 占32位 PIDT_ENTRY类型指针
}IDTR,*PIDTR;
256*8
typedef struct _IDT_ENTRY
{
USHORT offset_low; //中断处理函数地址低16位
USHORT selector;
UCHAR reserved;
UCHAR type:4;
UCHAR always0:1;
UCHAR dpl:2;
UCHAR present:1;
USHORT offset_high;//中断处理函数地址低16位
}IDT_ENTRY,*PIDT_ENTRY;//+3.offset_high<<16+offset_low //int 3 中断处理函数地址
#pragma pack(pop) //#pragma pack(pop)