首页
社区
课程
招聘
[求助]在双核系统下,如何切换CPU分别获得其IDT基地址?
发表于: 2008-3-26 10:20 5872

[求助]在双核系统下,如何切换CPU分别获得其IDT基地址?

2008-3-26 10:20
5872
如题,小弟在学习64bit下的内核编程,想通过修改IDT表项加入自己的中断门,但发现在双核下,每一个处理器都有自己的IDTR,用sidt指令只能获得他们任意中的一个,请问如何同时获得?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
嘿嘿,方法很多。。。。。。
1.开多进程,分别指定其CPU亲和性,分别绑定到所有的CPU上,然后在驱动中分别Attach,就可以更改所有CPU的IDT了
2.不开多进程,直接HOOK SSDT,然后指定自身的CPU亲和性,就可以在SSDT HOOKer中分别进入所有的CPU,就可以更改所有的IDT了
3.inline hook intX ,通过intX转发,比如inline hook int0 ,你就可以通过int0来
间接执行。。。。。(当然是除0来触发啦!)
这种方式最大的有点在于不用考虑多CPU多核的情况,直接用!!
2008-3-26 14:04
0
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
补充一下:
可以 inline hook 的就多拉~
以下是比较方便的向量号:
0AH 无效TSS   
0BH 段不存在
0CH 堆栈段异常
0DH 内存访问异常
0EH 页异常
6   无效操作码
3   断点

当然,inline hook 代码中必须对来源进行判定,可以在“产生异常的代码前面或者后面放一些特征码”,这样
在hooker中就可以检查是不是有这些特征码,没有的话就转去原来的代码即可。。。。。。
2008-3-26 14:23
0
游客
登录 | 注册 方可回帖
返回