约有 27 项符合查询结果, 以下是第 1 - 3项。
费时 < 1 秒。
呵呵,经过我亲自调试,找到问题原因了,和大家分享一下:是由于LookAside使用不当造成的:
1,发生挂死后每次陷入调试器发现都中断在nt!ExpScanGeneralLookasideList函数中,因此怀疑这个函数死循环了,检查函数,发现下面这段代码决定函数的返回:
nt!ExpScanGeneralLookasideList+0x85:
804e73d7 66895ed8 mov word ptr [esi-28h],bx
804e73db 8b36 mov esi,dword ptr [esi]
804e73dd 3b7508 cmp esi,dword ptr ...
Posted in Windows内核调试
by
yushang
on 2009-09-30
这是在Virtual PC 上运行一个使用TDI库的驱动时遇到的。按照您的DPC挂死的文章,我的堆栈回溯也应该到某个DPC中,但是奇怪的是居然是一个系统线程。出现挂死具有一定的随机性,但是90%的情况下都挂死
Posted in Windows内核调试
by
yushang
on 2009-09-30
参考张老师DPC挂死的文章,我机器上的!pcr输出,请高手帮忙分析分析:
DpcQueue:
0x8055b020 0x804dd2cd [Normal] nt!KiTimerExpiration
0x81a70bb8 0xf9b34043 [Normal] i8042prt!I8042MouseIsrDpc
0x81a70af0 0xf9b2e164 [Normal] i8042prt!I8042ErrorLogDpc
...
Posted in Windows内核调试
by
yushang
on 2009-09-28
呵呵,这个倒是第一次听说,我猜测原因如下:
1。常见的内存管理技术都是在分配给用户的内存前/后加上一些附加信息,内存管理函数根据用户指针推导出真正需要释放的地址
2。debug版的内存分配函数和release版的内存分配函数使用的附加信息大小是不一致的
3。debug版的dll会调用debug版的内存分配函数,release版的模块则调用release版的内存释放函数时按照release版的指针来推导真正需要释放的地址,所以会出错
这样对吗?
Posted in Windows内核调试
by
yushang
on 2009-09-17
呵呵,很不巧,我刚好用的是“你分配我释放“的方式:
BOOLEAN SomeAlloc(PULONG *ptr)
通过函数返回值确定是否是动态分配,通过ptr返回内存指针。调用者根据函数返回值决定是否释放。
你说的方法1是否存在额外的开销?对于分配的每片内存肯定要维护一个和该片内存关联的信息,释放的时候根据对应的信息决定是否需要真正的释放。
方法2不适合我的情况,我这里刚好是调用者没有任何该怎么分配内存的知识(因为分配的内存还需要填充好一定的内容),它必须要调用另一个函数。
我猜测,动态分配的内存指针是否会一定大于某个值,而常量区内存一定会小于某个值呢?不过就算这个方法可行,好像也没有精简多少,至多上面这个分配函数少返回一个值而已,谢谢,这个问题已经解决。
Posted in Windows内核调试
by
yushang
on 2009-09-17
有时候需要使用一个函数返回的内存指针(字符串指针),但是这个指针有可能指向动态分配的内存也可能指向常量区,显然如果是常量区,调用者不能做释放。有没有一个简单的办法判断一个指针是动态分配还是指向常量区呢?
Posted in Windows内核调试
by
yushang
on 2009-09-15