首页
社区
课程
招聘
[求助]这段代码有什么问题吗?
发表于: 2008-12-28 21:18 4231

[求助]这段代码有什么问题吗?

2008-12-28 21:18
4231
NTSTATUS DriverEntry (IN PDRIVER_OBJECT DriverObject,
					  IN PUNICODE_STRING RegistryPath)
{
	UNICODE_STRING uni;
	PULONG start;

	RtlInitUnicodeString(&uni, L"ZwOpenProcess");
	start = (PULONG)MmGetSystemRoutineAddress(&uni);

	KdPrint(("start : %08X\n", start));
	DriverObject->DriverUnload = Unload;

	while(1)
	{
		start++;
		__try
		{
			ProbeForRead(start, 1, 4);
			if (*(PCHAR)start == 0xe8)
			{
				KdPrint(("Found : %08X\n", start));
				break;
			}
		}
		__except(EXCEPTION_EXECUTE_HANDLER)
		{
			KdPrint(("got an exception : %08x\n", GetExceptionCode()));
			return GetExceptionCode();
		}
	}

	return STATUS_SUCCESS;
}


代码的作用是找NtOpenProcess函数代码中第一次出现0xe8的位置
为什么每次都抛出异常80000002 (STATUS_DATATYPE_MISALIGNMENT)
修改ProbeForRead一句后 直接就崩溃了 。。
还望高手解答

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

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 581
活跃值: (149)
能力值: ( LV12,RANK:600 )
在线值:
发帖
回帖
粉丝
2
The ProbeForRead routine checks that a user-mode buffer actually resides in the user portion of the address space, and is correctly aligned.

哎...用MmIsAddressValid吧....
2008-12-28 21:54
0
雪    币: 222
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
用MmIsAddressValid是没有问题的

if (!MmIsAddressValid(start))
{
    return STATUS_UNSUCCESSFUL;
}
while(1)
{
      start++;

      if (*(PCHAR)start == 0xe8)
      {
        KdPrint(("Found : %08X\n", start));
        break;
      }
}

但是后面到while循环里 就蓝屏了。。。
2008-12-28 22:50
0
雪    币: 581
活跃值: (149)
能力值: ( LV12,RANK:600 )
在线值:
发帖
回帖
粉丝
4
while(1)
{
      start++;

     if (!MmIsAddressValid(start))
      if (*(PCHAR)start == 0xe8)
      {
        KdPrint(("Found : %08X\n", start));
        break;
      }
}
还有....不要一直while...如果恶意干扰..你岂不是陷入死循环
2008-12-28 23:14
0
雪    币: 581
活跃值: (149)
能力值: ( LV12,RANK:600 )
在线值:
发帖
回帖
粉丝
5
上面写错了..把 ! 去掉..
2008-12-28 23:15
0
游客
登录 | 注册 方可回帖
返回
//