本论坛为只读模式,仅供查阅,不能注册新用户,不能发帖/回帖,有问题可发邮件 xikug.xp (^) gmail.com
查看: 5481|回复: 8

调用ObCreateObject创建DebugObject的时候蓝屏. [复制链接]

Rank: 1

发表于 2011-6-17 23:00:28 |显示全部楼层
NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegPath)
{       
        KPROCESSOR_MODE        PreviousMode;
        PDEBUG_OBJECT DebugObject;
        OBJECT_ATTRIBUTES        ObjectAttributes;
        NTSTATUS        Status;
        HANDLE        Handle;
        UNICODE_STRING        strFuncName = RTL_CONSTANT_STRING(L"ObCreateObject");
        ObCreateObject = TObCreateObject(MmGetSystemRoutineAddress(&strFuncName));       
        UNICODE_STRING        strTypeName = RTL_CONSTANT_STRING(L"DebugObject");
        InitializeObjectAttributes(&ObjectAttributes, &strTypeName, 0, NULL, 0);
        PreviousMode = ExGetPreviousMode();
        Status = ObCreateObject(PreviousMode, DbgkDebugObjectType, &ObjectAttributes, PreviousMode, NULL, sizeof(DEBUG_OBJECT), 0, 0, (PVOID *)&DebugObject);        //蓝在这一句..
        if (!NT_SUCCESS(Status)) return Status;
        ExInitializeFastMutex (&DebugObject->Mutex);
        InitializeListHead (&DebugObject->EventList);
        KeInitializeEvent (&DebugObject->EventsPresent, NotificationEvent, FALSE);
        Status = ObInsertObject (DebugObject,
                NULL,
                0x001f000f,
                0,
                NULL,
                &Handle);
        if (!NT_SUCCESS (Status)) {
                return Status;
        }
       
        KdPrint(("driver is load............\r\n"));
        pDriverObject->DriverUnload = DriverUnload;
        return STATUS_SUCCESS;
}


用windbg调试的时候.发现在调用ObCreateObject的时候..在给最后一个参数取地址的时候蓝屏了....可是我看了wrk他也是这样子写的...奇怪他就为什么不会蓝..纠结了两天未果..请大侠们赐教...谢谢><!

Rank: 1

发表于 2011-6-18 00:52:49 |显示全部楼层
sizeof(DEBUG_OBJECT)  = 四个字节  是不是这里的问题?

Rank: 1

发表于 2011-6-18 00:55:36 |显示全部楼层
typedef struct _DEBUG_OBJECT{
        KEVENT                EventsPresent;
        _FAST_MUTEX        Mutex;
        _LIST_ENTRY        EventList;
        ULONG                Flags;
}DEBUG_OBJECT, *PDEBUG_OBJECT;


谢谢楼上回答...这个是DEBUG_OBJECT结构..但是不是这里的问题..是最后一个参数的问题..在取地址的时候蓝屏了...-,-好奇怪来着.

Rank: 1

发表于 2011-6-18 01:07:10 |显示全部楼层
[quote=\"charwin\"]
typedef struct _DEBUG_OBJECT{
        KEVENT                EventsPresent;
        _FAST_MUTEX        Mutex;
        _LIST_ENTRY        EventList;
        ULONG                Flags;
}DEBUG_OBJECT, *PDEBUG_OBJECT;


谢谢楼上回答...这个是DEBUG_OBJECT结构..但是不是这里的问题..是最后一个参数的问题..在取地址的时候蓝屏了...-,-好奇怪来着.[/quote]

PDEBUG_OBJECT DebugObject
sizeof(DebugObject) 确实是4 ,即使不兰,还是有问题的~

Rank: 1

发表于 2011-6-18 01:18:48 |显示全部楼层
我这里不是...我这里这个结构大小是0x3C
但是我觉得..应该不会是这个结构的问题...

Rank: 1

发表于 2011-6-22 01:57:41 |显示全部楼层
PDEBUG_OBJECT DebugObject;
后面用这个变量的时候 &DebugObject,对指针取地址,应该不对吧
如果定义变量的时候是这样的DEBUG_OBJECT DebugObject; 或许可以这样用

Rank: 2

发表于 2011-6-22 13:34:05 |显示全部楼层
同意楼上的。

Rank: 5Rank: 5

发表于 2011-6-22 14:02:17 |显示全部楼层
Status = ObCreateObject (PreviousMode,
                             DebugObjectType,
                             ObjectAttributes,
                             PreviousMode,
                             NULL,
                             sizeof (DEBUG_OBJECT),
                             0,
                             0,
                             &DebugObject);

Rank: 1

发表于 2012-8-17 01:45:05 |显示全部楼层
nt!ObCreateObject+0x3:
8403f326 8bec            mov     ebp,esp
1: kd> dd esp
962b0bb0  962b0c1c 840c7f5f 840c7e01 863db6a0  
962b0bc0  0012bea4 840c7e01 00000000 0000003c
962b0bd0  00000000 00000000 962b0bfc
//这个俺也调了几天才发现问题,问题就是962b0bb0+0x0C的地方为空了引起的非法访问;
然后那个地址正好对应的是
__asm int 3
        Status=ObCreateObject(PreviousMode,
                (POBJECT_TYPE)&DbgkDebugObjectType,  //正好对应这个地址我加了个取址就好了.
                ObjectAttributes,
                PreviousMode,
                NULL,
                sizeof(DEBUG_OBJECT),
                0,
                0,
                (PVOID*)&DebugObject);
您需要登录后才可以回帖 登录 | 立即加入

Archiver|手机版|第8个男人 - 论坛为只读模式,仅供查阅

GMT+8, 2019-7-18 05:29 , Processed in 0.031347 second(s), 8 queries .

Design by pvo.cn

© 2011 Pvo Inc.

回顶部