IDT表
这个就是中断服务表,例如我们使用int 3软终端,我们就会跳到3这个表指向的内存地址去执行代码:
这个中段描述表如果要返回的话呢,我们需要用iretd函数进行返回,这样子就不会处理中断,但是程序却会崩溃。这样子可以避免断点。
一般对这个地址进行inline hook。
可以起到烦cc断点的效果。
可以使用汇编指令:_asm sidt idtr;
将idtr这个变量进行赋值,这个变量是一个结构体对象。
1 |
|
这个base其实是一个结构体的指针:
1 |
|
#pragma pack(push, 1)
这个的意思就是说压入对齐方式一个字节#pragma pack(pop)
这个意思弹出之前压入的对齐方式
结构体后面的冒号代表占几位,这四个加起来才8位一个字节。
中断和陷阱的区别就是一个是主动的,类似于int,另一个是异常的。
因为我们每个CPU有一个IDT表,所以我们需要修改每一个CPU的IDT表,比较麻烦,我们最好是使用inline hook的方法比较好。
在内联hook的时候最好是用pushad,pushf保存寄存器,最后popf,popad弹出来。