【求助】新手获得SSDT当前/原始地址的不可思议问题

aimsam 2012-04-28 10:51:28
NTSTATUS DriverEntry(
IN OUT PDRIVER_OBJECT DriverObject ,
IN PUNICODE_STRING RegistryPath
)
{

ULONG now , old;
//ULONG t;

CreateMyDevice (DriverObject ); //创建相应的设备
DriverObject ->DriverUnload = BEATPROTECT_DriverUnload;

now = GetNtOpenProcessAddr();//这个是获得当前OpenProcess的地址
old = GetSSDTAddrByIndex (190);//这个是获得原始OpenProcess的地址


KdPrint (("now = %0x, old = %0x" ), now, old );

return STATUS_SUCCESS ;
}
这样具体的函数实现就略吧。

然后怪事就来了
调试的时候上面的代码输出的结果是正确的。
但是如果我再把
//ULONG t;
这个注释打开,结果就是错的。。百思不得解。。以前是JAVA的难道C里申请了一个变量也要改变结果么。。。


新人求解。。各位大大受累指点一下
图片如下
...全文
164 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
StarsunYzL 2012-04-29
  • 打赏
  • 举报
回复
同上,KdPrint是个宏,要把所有参数都刚到内括号里:

KdPrint(("now = %0x, old = %0x", now, old));

没有定义ULONG t时,栈刚好巧合对上KdPrint的now、old参数吧,多了t栈就对不上了,像上面这样把所有参数都括起来就没问题了。
aimsam 2012-04-29
  • 打赏
  • 举报
回复
唉唉,是我太粗心了。。
Lactoferrin 2012-04-28
  • 打赏
  • 举报
回复
kd要这样
KdPrint (("now = %0x, old = %0x" , now, old ));
Lactoferrin 2012-04-28
  • 打赏
  • 举报
回复
说不定就是你那两个函数的错误
aimsam 2012-04-28
  • 打赏
  • 举报
回复
自顶、、、

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧