-
-
[求助]多核IOAPIC HOOK & 多核IDT
-
发表于: 2012-9-16 22:08 4786
-
鄙人不才,最近看寒江独钓中键盘过滤的IOAPIC hook,边对着wowocock大牛的代码边写一个多核IOAPIC hook的玩具,不过写着写着问题就来了,可能是因为鄙人windows内核了解甚少,所以对一些问题看得不够透彻吧,以下是鄙人的几个问题(假设情况是双核):
1.两个逻辑核心中的IDT表的内容一定相同么?如果相同,是通过同步来实现的么?
2.如果IDT表中内容不同,如果有一个IDT中的第n项是空,但另一个IDT中此项不为空,IOAPIC找新的空中断号的时候会不会先后找到两个不同的中断号n,n'?这时候再设置IOAPIC的时候,是否后面那个中断号会把前面那个中断号覆盖掉?就是把旧的映射IRQ1→n覆盖成新的映射IRQ1→n'。
3.跟了下2K源码里的kesetaffinitythread和KeSetTargetProcessorDpc函数,最后都是跟到了设置PKPRCB Prcb = KiProcessorBlock(Processor);这里,PKPRCB只找到了一个巨型结构体- -……但看KiProcessorBlock[MAXIMUM_PROCESSORS]的注释说是这个数组是用来满足跑在另一个处理器上的代码的需求的,所以这两个函数影响CPU的方式实际上是一样的?
顺带说下,因为自己的VMWARE中的2K3不知为何设了俩核心也只显示一个核心,再设更多核心启动的时候一个ntxxxmp.exe挂掉,鄙人汇编还正在学,windbg接触的也少,也没看出端倪,所以也暂时没办法尝试这几个问题,但搜到论坛里有人说IDT可以不一样,所以才产生了第二个问题。其实对那个添加IRQ映射的函数,如果是运行中CPU切换了,似乎也会造成类似的问题。本想是要两个IDT表如果找到同一个空表项的话就好办些,可否把两个表的地址存下来然后一起搜到同一个空表项为止?
以上皆为个人愚见,望各位予以指教,先行谢过。
1.两个逻辑核心中的IDT表的内容一定相同么?如果相同,是通过同步来实现的么?
2.如果IDT表中内容不同,如果有一个IDT中的第n项是空,但另一个IDT中此项不为空,IOAPIC找新的空中断号的时候会不会先后找到两个不同的中断号n,n'?这时候再设置IOAPIC的时候,是否后面那个中断号会把前面那个中断号覆盖掉?就是把旧的映射IRQ1→n覆盖成新的映射IRQ1→n'。
3.跟了下2K源码里的kesetaffinitythread和KeSetTargetProcessorDpc函数,最后都是跟到了设置PKPRCB Prcb = KiProcessorBlock(Processor);这里,PKPRCB只找到了一个巨型结构体- -……但看KiProcessorBlock[MAXIMUM_PROCESSORS]的注释说是这个数组是用来满足跑在另一个处理器上的代码的需求的,所以这两个函数影响CPU的方式实际上是一样的?
顺带说下,因为自己的VMWARE中的2K3不知为何设了俩核心也只显示一个核心,再设更多核心启动的时候一个ntxxxmp.exe挂掉,鄙人汇编还正在学,windbg接触的也少,也没看出端倪,所以也暂时没办法尝试这几个问题,但搜到论坛里有人说IDT可以不一样,所以才产生了第二个问题。其实对那个添加IRQ映射的函数,如果是运行中CPU切换了,似乎也会造成类似的问题。本想是要两个IDT表如果找到同一个空表项的话就好办些,可否把两个表的地址存下来然后一起搜到同一个空表项为止?
以上皆为个人愚见,望各位予以指教,先行谢过。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
看原图
赞赏
雪币:
留言: