首页
社区
课程
招聘
[求助]在遍历Dpc定时器时遇到的疑惑
发表于: 2017-9-12 16:03 3190

[求助]在遍历Dpc定时器时遇到的疑惑

2017-9-12 16:03
3190
最近在学习Dpc定时器的知识,然后自己写了个遍历系统中所有Dpc定时器的驱动,但是在加载驱动之后会出现死循环的问题,后面反复琢磨了很久,我发现当我的Win7系统在开启内核调试模式之后,然后用windbg附加调试,再加载驱动,就会出现在遍历某一个dpc定时器对象链表陷入死循环的情况;然后我重新启动系统,进入了正常的win7系统,然后再次加载驱动,就没有出现死循环的问题了,而且前前后后试了很多次,始终都是正确的。所以我就觉得奇怪了,为什么开启内核调试模式之后就会总是出现死循环的问题,而正常模式下就不会出现,这其中是什么原理?
下面我附上枚举Dpc定时器函数的代码:
void enum_DPC()
{
	ULONG KPRCB;

	PKTIMER_TABLE_ENTRY ktime_table_addr;
	_asm
	{
		push eax;
		mov eax, fs:[0x20];//KPCR地址
		mov KPRCB, eax;
		pop eax;
	}
	__try
	{
		PKTIMER pTimer;
		PLIST_ENTRY pList;
		ktime_table_addr = (PKTIMER_TABLE_ENTRY)(KPRCB + 0x1960 + 0x40);
		DbgPrint("KPRCB=%08X,KPRCB=%08x,ktime_table_addr=%08X\r\n", KPRCB, KPRCB, ktime_table_addr);
		PKTIMER_TABLE_ENTRY table = ktime_table_addr;
		for (int i = 0; i < 256; i++, table++)
		{
			if (!MmIsAddressValid((PVOID)table))
			{
				return;
			}
			if (table->Time.HighPart == 0xFFFFFFFF)
				continue;          //为空的数组高位双字为FFFFFFFF
			if (!MmIsAddressValid((PVOID)table->Entry.Blink))
				continue;
			if (!MmIsAddressValid((PVOID)table->Entry.Flink))
				continue;
			for (pList = table->Entry.Blink;
				pList != &table->Entry;
				pList = pList->Blink)
			{
				pTimer = (PKTIMER)((ULONG)pList - 0x18);        //取得timer对象

				if (!MmIsAddressValid((PVOID)pTimer) ||
					!MmIsAddressValid((PVOID)pTimer->Dpc) ||
					!MmIsAddressValid((PVOID)pTimer->Dpc->DeferredRoutine))
				{
					if (!MmIsAddressValid((PVOID)pList->Blink)) break;
					continue;
				}
				if (!MmIsAddressValid((PVOID)pList->Blink))
					break;


				DbgPrint("%d= TIMER=%X,DPC=%X,FUN=%X\r\n", i, pTimer, pTimer->Dpc, pTimer->Dpc->DeferredRoutine);
			}
		}
	}
	__except (EXCEPTION_EXECUTE_HANDLER)
	{
		return;
	}
}

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 15
活跃值: (353)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
dpc处理要考虑cpu核心的吧
2017-9-12 19:08
0
雪    币: 29
活跃值: (184)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
嗯,我这里只遍历当前线程运行所在核心的dpc定时器而且我的虚拟机是单核心的,这个应该和我的问题没有关系
2017-9-12 19:18
0
雪    币: 8865
活跃值: (2379)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
4
读资源也要加锁,加锁,加锁。

2017-9-12 19:59
0
雪    币: 29
活跃值: (184)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
cvcvxk 读资源也要加锁,加锁,加锁。
我试试看
2017-9-12 23:30
0
游客
登录 | 注册 方可回帖
返回
//