首页
社区
课程
招聘
[原创]重读老文章系列:内核同步那些事儿
发表于: 2012-7-28 20:48 9266

[原创]重读老文章系列:内核同步那些事儿

2012-7-28 20:48
9266

自从有了多核啊,多cpu啊,超线程啊~
同步就有了更多的麻烦事儿

第一大类同步,让其他核都歇着的同步
一本老书《Rootkits: Subverting the Windows Kernel》里有详细的代码。

第二大类同步,IRQL提升方式同步
比如spinlock啊,resourceLock啊~都是这样的,提升到DISPATCH_LEVEL从而保证了同时只有一个DISPATCH_LEVEL的运行,缺点是对于大于DISPATCH-LEVEL的运行者无作用(一般来说我们也不会自身运行在超DPCLevel的世界里)。不过可以使用RaiseIrql来提升到非常高的irql,但是irql高了有时候会死的很难看。
详细请看MSDN有关内容。

PS:有意资助者请联系QQ:86879759

下面摘录了 Rootkits书上的代码并编写了简单的测试代码~


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

收藏
免费 6
支持
分享
最新回复 (9)
雪    币: 2314
活跃值: (2205)
能力值: (RANK:400 )
在线值:
发帖
回帖
粉丝
2
VOID WaitForHook(
				 __in struct _KDPC  *Dpc,
				 __in_opt PVOID  DeferredContext,
				 __in_opt PVOID  SystemArgument1,
				 __in_opt PVOID  SystemArgument2
				 )
{
	KIRQL OldIrql;

	OldIrql = KeRaiseIrqlToDpcLevel();
	InterlockedIncrement(&g_nRaisedCpuCnt);
	KeAcquireSpinLockAtDpcLevel(&g_SpinLock);
	KeReleaseSpinLockFromDpcLevel(&g_SpinLock);
	KeLowerIrql(OldIrql);
}

我一般都是让其他cpu等待同一个SpinLock。
2012-7-28 21:05
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
3
DPC里貌似M$说要interlock才靠谱~
2012-7-28 21:09
0
雪    币: 2314
活跃值: (2205)
能力值: (RANK:400 )
在线值:
发帖
回帖
粉丝
4
求出处。
2012-7-28 22:03
0
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
5
向V校学习
2012-7-28 22:04
0
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
6
第二大类同步“IRQL提升方式同步”里的SpinLock和DISPATCH_LEVEL能不能讲一讲

不太理解
2012-7-28 22:42
0
雪    币: 239
活跃值: (133)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
老V我你是不是神父?我蛮好想资助的。
2012-7-28 22:56
0
雪    币: 220
活跃值: (721)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
老V不是神父,但他的网名叫神父
2012-7-29 11:01
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
9
这才是正解。
2012-7-29 12:37
0
雪    币: 31
活跃值: (48)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
顶,虽然代码还看不懂。
2012-8-2 23:47
0
游客
登录 | 注册 方可回帖
返回
//