首页
社区
课程
招聘
求KeSetEvent逆向后的伪代码
发表于: 2012-6-6 09:31 4144

求KeSetEvent逆向后的伪代码

2012-6-6 09:31
4144
BOSD BAD_POOL_CALLER (c2)  发生在KeSetEvent(&transferObject->Done, IO_NO_INCREMENT, FALSE);代码处。Arg1的值是7,意思是Attempt to free pool which was already freed

查看调用Stack_TEXT 发现
f7966b50 8054c583 000000c2 00000007 00000cd4 nt!KeBugCheckEx+0x1b
f7966ba0 b8e1596f 8652d700 00000000 85a3c438 nt!ExFreePoolWithTag+0x2a3
f7966bc4 f77106ea 00000000 85a3c438 85e88660 dhUSBBase!ADP_BulkStreamComplete+0x1bf [f:\010_driver\adaptbase.cpp @ 909]
WARNING: Stack unwind information not available. Following frames may be wrong.
f7966bec f77106ea 00000000 00000000 85e88660 bhound5+0x16ea
f7966c14 804f26da 00000000 00000000 85b1c008 bhound5+0x16ea
f7966c44 f6d8d0d5 80547b4c 860c9db0 86ef9028 nt!IopfCompleteRequest+0xa2
f7966cac f6d8d43d 8652d700 c0007000 80547b4c USBPORT!USBPORT_CompleteTransfer+0x373
f7966ce8 f6d8a7c3 86ef90ec 80547b4c 860c9db0 USBPORT!USBPORT_FlushCancelList+0x287
f7966d10 f6d8cb7c 86ef9028 80547b4c 860c9db0 USBPORT!USBPORT_DmaEndpointWorker+0x1b9
f7966d38 f6d905ea 86ef9028 00000002 86ef9028 USBPORT!USBPORT_CoreEndpointWorker+0x6d2
f7966d7c f6d891b0 86ef9028 00000000 86d5ada0 USBPORT!USBPORT_Worker+0x212
f7966dac 805d0fbe 86ef9028 00000000 00000000 USBPORT!USBPORT_WorkerThread+0x12a
f7966ddc 8054716e f6d89086 86ef9028 00000000 nt!PspSystemThreadStartup+0x34
00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x16

[f:\010_driver\adaptbase.cpp @ 909] 处的代码为 KeSetEvent(&transferObject->Done, IO_NO_INCREMENT, FALSE);
给人的感觉是KeSetEvent内部会释放Buffer。 求KeSetEvent的源代码。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 53
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
905:         else//BulkStreamComplete All done, setting event
   906:         {                       
   907:                 IoFreeIrp(Irp);
   908:                 ExFreePool(pUrb);
>  909:                 KeSetEvent(&transferObject->Done,IO_NO_INCREMENT,FALSE);
   910:                 ntStatus = STATUS_MORE_PROCESSING_REQUIRED;
   911:         }
   912:         return ntStatus;
   913:
   914: }
2012-6-6 09:32
0
雪    币: 321
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
卸载掉bushound5试试看,bushound5是有bug的。
2012-6-6 09:39
0
雪    币: 53
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
因为好几台机器一块试,就一台机器上出这个,所有机器都有Bushound5. 不过按照你的建议,我还是再试试吧。
2012-6-6 09:43
0
雪    币: 3116
活跃值: (1269)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
5
哥们,你会不会看堆栈啊,
905:   else//BulkStreamComplete All done, setting event
   906:   {      
   907:     IoFreeIrp(Irp);
   908:     ExFreePool(pUrb);
>  909:     KeSetEvent(&transferObject->Done,IO_NO_INCREMENT,FALSE);
   910:     ntStatus = STATUS_MORE_PROCESSING_REQUIRED;
   911:   }
   912:   return ntStatus;
   913:

这里显示的意思是下一句是KeSetEvent,所以出问题的是ExFreePool,估计你在其它地方释放过了pUrb。
PS:怪不得现在搞内核驱动的都白菜价了。
2012-6-6 10:07
0
雪    币: 53
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
呵呵,这个意思啊。 我也不是搞驱动的,业余改改BUG就行了。
2012-6-6 11:28
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
7
话说 KeSetEvent 的代码可以在wrk里找到吧?
2012-6-6 11:42
0
游客
登录 | 注册 方可回帖
返回
//