首页
社区
课程
招聘
[求助]关于inline hook的一个疑问
发表于: 2015-4-21 09:53 5401

[求助]关于inline hook的一个疑问

2015-4-21 09:53
5401
原始链接在这,http://bbs.pediy.com/showthread.php?t=71480某大牛整理的;
对于这部分的KSPIN_LOCK 不明白,感觉这么写没意义啊,求指正。。。

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 1392
活跃值: (5107)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
2
主要是保证memcpy的时候不会被切换或者中断

想想如果memcpy5字节完成了前面4字节的拷贝 还有最后一字节没有拷贝。此时发生了线程切换。恰好该线程执行了你正在修改的数据,此时你拷贝还没完成。蓝屏就发生了。
2015-4-21 10:26
0
雪    币: 1392
活跃值: (5107)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
3
不过多核心多字节还是可能有问题,其他核心不跟你旋怎么办?
2015-4-21 10:38
0
雪    币: 27
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
使用这个KeRaiseIrqlToDpcLevel();是不是会更好点
2015-4-21 10:44
0
雪    币: 1392
活跃值: (5107)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
5
这个本身就是提升到DISPATCH_LEVEL 效果和前面的文档keAcquireSpinLock效果是一样的。重点是你只提升了当前的CPU到DISPATCH_LEVEL,多核别的CPU还是可能执行到你的函数这里蓝屏。

最好的办法是选取4字节或者8字节的HOOK点。调用InterLocked系列函数完成原子操作。
2015-4-21 10:55
0
雪    币: 1
活跃值: (1174)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
用IPI将其它CPU先挂起,就安全了吧
2015-4-21 18:27
0
雪    币: 6910
活跃值: (9049)
能力值: ( LV17,RANK:797 )
在线值:
发帖
回帖
粉丝
7
cil关中断应该也可以
2015-4-21 23:14
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
这个没用,属于多此一举。

单CPU,只提升IRQL就行了。
多CPU,排DPC + 原子操作指令。

没有100%安全的hook。你要hook的位置必须保证没有任何线程EIP落在这里,然后锁死CPU修改指令,这是安全的,如果你hook时,有线程EIP落在这里,除非修正线程EIP,否则线程恢复执行后必出事。。。
2015-4-23 12:29
0
雪    币: 5467
活跃值: (1430)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这代码很风骚啊
2015-4-26 14:30
0
游客
登录 | 注册 方可回帖
返回
//