中断门


#include <windows.h> #include <stdio.h> // 存放idtr寄存器的值 char sz[6]; // 声明一个全局变量 存放IDT表中的第二项的值 LONGLONG IdtSecond; // 用于间接获取IDT表第二项的地址 DWORD* MyFirst; // 存放IDT表第二项的地址 DWORD MySecond; VOID _declspec(naked) MyCAll() { // 将IDTR寄存器的值放入数组 _asm { sidt sz; } // IDT表的地址存放于第二个位置 // 获得的是IDT表基址的地址 MyFirst = (DWORD*)&sz[2]; // 获得IDT表第二项的值 MySecond = (*MyFirst) + 8; // 获取IDT表第二项的值 IdtSecond = *(LONGLONG*)(MySecond); // 从中断处理函数返回 _asm { iretd; } } int main() { // 产生异常,进入相应的中断处理函数 _asm { int 0x20; } printf("%llx\n", IdtSecond); system("pause"); return 0; }

 

posted @ 2018-09-23 10:58  李道臣  阅读(267)  评论(0编辑  收藏  举报