watchsky 发表于 2012-6-15 10:46:17

hook swapcontext的unload问题

x64下我hook了swapcontext函数,每次unload(什么都不做,unhook放到了其他位置,且正常工作。)的时候都会蓝屏://Bug Check 0xD1: DRIVER_IRQL_NOT_LESS_OR_EQUAL
请问什么原因,如何解决?

乔丹二世 发表于 2012-6-15 11:17:02

楼主提问还不忘代码保密,真是厉害!

watchsky 发表于 2012-6-15 22:32:01

Tesla.Angela 发表于 2012-6-15 18:30 static/image/common/back.gif
蓝屏十有八九是因为把指令折断了。

应该不是,我看了hook前后的汇编代码,貌似还是中断级的事

watchsky 发表于 2012-6-15 11:53:47

乔丹二世 发表于 2012-6-15 11:17 static/image/common/back.gif
楼主提问还不忘代码保密,真是厉害!

调通玩一阵子没什么bug了就开源,哈哈,以免献丑

Tesla.Angela 发表于 2012-6-15 18:30:04

蓝屏十有八九是因为把指令折断了。

Tesla.Angela 发表于 2012-6-16 18:35:59

watchsky 发表于 2012-6-15 22:32 static/image/common/back.gif
应该不是,我看了hook前后的汇编代码,貌似还是中断级的事

你理解错我的意思了。

比如一条指令,由两个字节组成:XX YY,而且这两个字节也是你修改过的两个字节。当你要UNHOOK时,把这两个字节替换成了ZZ WW,但是有一条线程执行到XX时,就被中断了(正好此时你进行了UNHOOK,把指令由XX YY改为了ZZ WW),结果最终执行的字节就是XX WW,于是就蓝屏了。

watchsky 发表于 2012-6-16 23:03:48

本帖最后由 watchsky 于 2012-6-16 23:05 编辑

Tesla.Angela 发表于 2012-6-16 18:35 static/image/common/back.gif
你理解错我的意思了。

比如一条指令,由两个字节组成:XX YY,而且这两个字节也是你修改过的两个字节。 ...

我明白你的意思了,但是问题好像不是这个,因为我尝试用另一条线程去unhook,结果成功unhook了,一直没有问题。之后我unload,unload里什么都不做,结果unload的最后一条DbgPrint被成功执行,然后蓝屏,蓝屏错误是d1。没办法,我在unload里死循环,就不蓝屏了,但是问题一直没找到是什么。奇怪的是,我不进行hook,则可以顺利unload

Tesla.Angela 发表于 2012-6-16 23:39:18

watchsky 发表于 2012-6-16 23:03 static/image/common/back.gif
我明白你的意思了,但是问题好像不是这个,因为我尝试用另一条线程去unhook,结果成功unhook了,一直没有 ...

UNHOOK之后一段时间没有蓝屏?但是UNHOOK之后一段时间UNLOAD驱动就蓝屏了?

这个就怪了。。。一个垃圾解决方法就是干脆不卸载驱动了。

watchsky 发表于 2012-6-17 00:32:27

我看人家写的那个原版的xp的hook swapcontext注释里也有我那个错误,但是没引发这个错误,不知道他是怎么解决的。它的hook方法是直接push到指定地址。我的unload现在就是死循环加睡眠,头大的://Bug Check 0xD1: DRIVER_IRQL_NOT_LESS_OR_EQUAL

watchsky 发表于 2012-6-17 12:36:26

Tesla.Angela 发表于 2012-6-16 23:39 static/image/common/back.gif
UNHOOK之后一段时间没有蓝屏?但是UNHOOK之后一段时间UNLOAD驱动就蓝屏了?

这个就怪了。。。一个垃圾解 ...

问题解决,我在hook的线程里进行unhook,可以顺利unload,在其它线程里进行unhook,则不能unload。但是原因没找到

Tesla.Angela 发表于 2012-6-17 15:04:35

watchsky 发表于 2012-6-17 12:36 static/image/common/back.gif
问题解决,我在hook的线程里进行unhook,可以顺利unload,在其它线程里进行unhook,则不能unload。但是原 ...

恭喜你解决问题。
PS:放源码(在内部区放)
页: [1]
查看完整版本: hook swapcontext的unload问题