LionD8
驱动牛犊
驱动牛犊
  • 注册日期2003-04-20
  • 最后登录2011-02-14
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1430回复:3

wowocock老大,再帮忙啊.

楼主#
更多 发布于:2005-02-24 11:49
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]
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2005-02-24 22:57
SORRY,偶只熟悉SOFTICE,而且我在调试的时候喜欢看汇编代码来定位每一个寄存器,内存等.
虽然有时候需要计算地址什么的,不过感觉很NATIVE,很塌实......
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
LionD8
驱动牛犊
驱动牛犊
  • 注册日期2003-04-20
  • 最后登录2011-02-14
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-02-25 09:05
谢谢老大。原来被vc宠坏了,人比较懒。呵呵,向老大学习。
谢谢,希望以后多多指点指点。
johnliu
驱动小牛
驱动小牛
  • 注册日期2004-08-06
  • 最后登录2005-03-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-02-26 11:01
好象以前看谁说过这个问题
好象是因为编译器优化了,导致本地变量有的被寄存器代替了。
游客

返回顶部