首页
社区
课程
招聘
[求助]应用层调用 DbgPrintEx 无输出
发表于: 2023-3-12 14:46 6347

[求助]应用层调用 DbgPrintEx 无输出

2023-3-12 14:46
6347
typedef NTSYSCALLAPI ULONG(NTAPI* fnDbgPrintEx)(
	ULONG ComponentId,
	ULONG Level,
	PCSTR Format,
	...
	);

fnDbgPrintEx DbgPrintEx = NULL;
#define kprintf(...) DbgPrintEx(0, 0, __VA_ARGS__)
void CTestDbgPrintDlg::OnBnClickedButton1()
{

	// TODO: 在此添加控件通知处理程序代码
	HMODULE ntdll = GetModuleHandle(L"NTDLL.DLL");
	if (ntdll!=NULL)
	{
		DbgPrintEx = (fnDbgPrintEx)GetProcAddress(ntdll, "DbgPrintEx");
		if (DbgPrintEx)
		{
			DbgPrintEx(0, 0, "hello world");
			kprintf("Hello World");
		}
	}
}


我想在应用层调用 DbgPrintEx 这个函数 ntdll.dll 也是导出函数 调用无输出 各位大佬麻烦看看吧





2023.3.12 16点48分




发现 自己设置的回调

 可以捕获内核输出 但是 3环的就不能捕获 windbg 可以正常输出 



 内核
#define dbg()		DbgBreakPoint() //断点
//DebugPrintCallback
VOID MyDebugPrintCallback(_In_ PSTRING Output, _In_ ULONG ComponentId, _In_ ULONG Level)
{
	if (Output != NULL && Output->Buffer != NULL)
	{
		dbg();

	}
}


//DebugPrintCallback卸载
NTSTATUS DbgViewRemove() {

	return DbgSetDebugPrintCallback(MyDebugPrintCallback, FALSE);
}
//DebugPrintCallback安装
NTSTATUS DbgViewInstall() {
	return DbgSetDebugPrintCallback(MyDebugPrintCallback, TRUE);
}



难道这个函数 

DbgPrintEx


还要看什么吗 


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2023-3-12 16:50 被ThanatosKer编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (13)
雪    币: 6
活跃值: (3290)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这个函数得挂调试器才有输出
2023-3-12 16:23
0
雪    币: 46
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
咖啡_741298 这个函数得挂调试器才有输出

用了dbgview 没用

但是内核用这个函数可以输出

最后于 2023-3-12 16:53 被ThanatosKer编辑 ,原因:
2023-3-12 16:47
0
雪    币: 46
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
2023-3-12 16:53
0
雪    币: 3868
活跃值: (3643)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
在HKLM\SYSTEM\CurrentControlSet\Control\Session Manager下新建新的键“Debug Print Filter”
在新建的键中添加新的值,名为“DEFAULT”的DWORD类型值,并将值设为8  

重启 OK
2023-3-12 17:24
0
雪    币: 6084
活跃值: (5490)
能力值: ( LV5,RANK:65 )
在线值:
发帖
回帖
粉丝
6
不会内核,没用过这个,应用层我都是用OutputDebugString()
2023-3-12 17:58
0
雪    币: 46
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
iamasbcx 在HKLM\SYSTEM\CurrentControlSet\Control\Session Manager下新建新的键“Debug Print Filter” 在新建的键中添加新的值,名为“DEF ...
我试了  没效果
2023-3-12 20:25
0
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
你好,问题解决了吗?
2023-3-13 12:21
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9
估计是权限问题,都用管理员打开,dbgview要打开Global。
需要有Event, \BaseNamedObjects\DBWIN_BUFFER_READY, Full control
否则只有Event, \Sessions\1\BaseNamedObjects\DBWIN_BUFFER_READY, Full control
2023-3-13 16:17
0
雪    币: 6
活跃值: (3290)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
ThanatosKer 咖啡_741298 这个函数得挂调试器才有输出 用了dbgview 没用但是内核用这个函数可以输出
挂调试器啊,输出在调试器里面,被调试器捕获, debugview是走的共享通信捕获
2023-3-13 16:26
0
雪    币: 46
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
咖啡_741298 挂调试器啊,输出在调试器里面,被调试器捕获, debugview是走的共享通信捕获
为啥内核 DbgPrintEx 能被 debugview 捕获 而 应用层的DbgPrintEx  debugview不能捕获呢 windbg 就可以捕获应用层的DbgPrintEx  
2023-3-14 14:40
0
雪    币: 46
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
12
zz77 估计是权限问题,都用管理员打开,dbgview要打开Global。 需要有Event, \BaseNamedObjects\DBWIN_BUFFER_READY, Full control 否则只 ...
用管理员了
2023-3-14 14:40
0
雪    币: 6
活跃值: (3290)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
ThanatosKer 为啥内核 DbgPrintEx 能被 debugview 捕获 而 应用层的DbgPrintEx debugview不能捕获呢 windbg 就可以捕获应用层的DbgPrintEx [em_16]
debugview 有驱动,所以能获取驱动的DbgPrintEx输出。  R3程序要输出到debugview 走的是共享内存和事件同步
2023-3-14 16:14
0
雪    币: 46
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
咖啡_741298 debugview 有驱动,所以能获取驱动的DbgPrintEx输出。 R3程序要输出到debugview 走的是共享内存和事件同步
2023-3-14 19:19
0
游客
登录 | 注册 方可回帖
返回
//