阅读:1469回复:3
wowocock老大,再帮忙啊.
wowocock老大,帮忙啊.
请问用windbg在虚拟机上调试驱动。 也能基于源代码级别的调试。 但是有些变量看不见,通过添加一些看点,但是没反应,怎么会事呀,疑惑。 例如 下面这段代码。 NTSTATUS HookZwQuerySystemInformation( IN ULONG SystemInformationClass, IN PVOID SystemInformation, IN ULONG SystemInformationLength, OUT PULONG ReturnLength) { NTSTATUS rc; struct _SYSTEM_PROCESSES *curr; struct _SYSTEM_PROCESSES *prev = NULL; UNICODE_STRING process_name; //要隐藏的进程名字 RtlInitUnicodeString(&process_name, L\"WINLOGON.EXE\"); rc = (RealZwQuerySystemInformation) ( SystemInformationClass, SystemInformation, SystemInformationLength, ReturnLength); if(NT_SUCCESS(rc)) { if(5 == SystemInformationClass) //如果系统查询类型是SystemProcessesAndThreadsInformation { curr = (struct _SYSTEM_PROCESSES *)SystemInformation; //struct _SYSTEM_PROCESSES *prev = NULL; if(curr->NextEntryDelta)((char *)curr += curr->NextEntryDelta); while(curr) { if (RtlCompareUnicodeString(&process_name, &curr->ProcessName, 1) == 0) { if(prev) { if(curr->NextEntryDelta) { prev->NextEntryDelta += curr->NextEntryDelta; } else { prev->NextEntryDelta = 0; } } else { if(curr->NextEntryDelta) { (char *)SystemInformation += curr->NextEntryDelta; } else { SystemInformation = NULL; } } if(curr->NextEntryDelta)((char *)curr += curr->NextEntryDelta); else { curr = NULL; break; } } if(curr != NULL) { prev = curr; if(curr->NextEntryDelta)((char *)curr += curr->NextEntryDelta); else curr = NULL; } } // end while(curr) } } return rc; } 局部变量 SystemInformationClass, SystemInformation 等HookZwQuerySystemInformation函数中的参数可以在看点中看见。 但是例如 struct _SYSTEM_PROCESSES *curr; struct _SYSTEM_PROCESSES *prev = NULL; 程序运行后调试时在看点里面添加后仍然看不见(例如VC调试环境调试程序时,就能很方便的查看一些指针结构的struct)。 程序能基于源代码基的调试,符号这些应该都时添加完了了的,但是为什么.....不行呢? 感激感激。急哦。。。。。。 [编辑 - 2/24/05 by LionD8] |
|
沙发#
发布于:2005-02-24 22:57
SORRY,偶只熟悉SOFTICE,而且我在调试的时候喜欢看汇编代码来定位每一个寄存器,内存等.
虽然有时候需要计算地址什么的,不过感觉很NATIVE,很塌实...... |
|
|
板凳#
发布于:2005-02-25 09:05
谢谢老大。原来被vc宠坏了,人比较懒。呵呵,向老大学习。
谢谢,希望以后多多指点指点。 |
|
地板#
发布于:2005-02-26 11:01
好象以前看谁说过这个问题
好象是因为编译器优化了,导致本地变量有的被寄存器代替了。 |
|