首页
社区
课程
招聘
[求助]在NtCreateFile的hook函数里调用OutputDebugString导致程序报错
发表于: 2010-11-27 12:02 9242

[求助]在NtCreateFile的hook函数里调用OutputDebugString导致程序报错

2010-11-27 12:02
9242
我hook了NtCreateFile这个函数,我想在这个函数里用OutputDebugString输出所要打开的文件,但是运行程序时总是提示“没有找到 DBWIN_BUFFER,因此这个应用程序未能启动”这个错误,程序无法运行。

如果在hook函数里去掉OutputDebugString输出,程序就可以正常运行,请问,如何解决这个问题?

或者有没有其它可以用于输出的方法?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
2
DbgPrint
2010-11-27 13:35
0
雪    币: 378
活跃值: (702)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
3
哈KdPrint也行
2010-11-27 15:47
0
雪    币: 150
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我是在应用层做的hook,这两个输出函数用不了
2010-11-27 15:52
0
雪    币: 306
活跃值: (153)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
OutputDebugString 不能格式化字符串, 贴下你的OutputDebugString的代码
2010-11-27 15:56
0
雪    币: 724
活跃值: (81)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
ntdll.dll导出了DbgPrint,你的系统不是WIN98吧
2010-11-27 18:14
0
雪    币: 150
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
用DbgView看不到DbgPrint的输出吗?

定义的函数原型

typedef NTSTATUS (__stdcall *P_DbgPrint)( LPCSTR Format, ... );
P_DbgPrint pDbgPrint = NULL;


获取函数地址

HMODULE hNtdll = GetModuleHandleW(L"ntdll.dll");

pDbgPrint = (P_DbgPrint)GetProcAddress(hNtdll, "DbgPrint");
if(NULL == pDbgPrint)
{
OutputDebugString(TEXT("Error"));
return;
}
OutputDebugString(TEXT("Success"));


这是函数的调用

pDbgPrint("%wZ\n", ObjectAttributes->ObjectName);


但是在DbgView下只能看到"Success"的输出,其它什么都没看到
2010-11-28 10:39
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
8
HMODULE hNtdll = GetModuleHandleW(L"ntdll.dll");
这里成功了吗?
2010-11-28 13:59
0
雪    币: 724
活跃值: (81)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
DebugView在应用层不支持截获DbgPrint消息:

DebugView CaptureUnder Windows 2000, XP, Server 2003 and Vista DebugView will capture:
Win32 OutputDebugString
Kernel-mode DbgPrint
All kernel-mode variants of DbgPrint implemented in Windows XP and Server 2003
2010-11-28 19:14
0
雪    币: 367
活跃值: (20)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
10
函数重入的问题,在你调用outputstring时,这个函数内部在一些时候会调用createfile,参数好象是 DBWIN_BUFFER
你只需要先调用系统的函数,再outputstring就可以了.

这与dbgview没关系.
2010-11-28 21:47
0
游客
登录 | 注册 方可回帖
返回
//