知识大全 win2003下面显示dbgprint的输出内容

Posted 函数

篇首语:勤劳一日,可得一夜安眠;勤劳一生,可得幸福长眠本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 win2003下面显示dbgprint的输出内容相关的知识,希望对你有一定的参考价值。

   大家都知道 driver studio 带一个 drivermonitor 的工具 能显示程序里面由 dbgprint 输出的字符串 这里说说他的工作原理 本人也是初学者 不对的地方 请指教     先说自己的平台环境 使用 win build rtm 版 这个很重要 dbgprint 的实现在各个平台上是有差异的 这里只是说以上平台的实现 因为我也没有在其他平台上试过 所有下面的程序 如果您想运行的话 请您先看完这个文章 再动手 否则遇到 bugcheck 别怪我没有提醒     先说 dbgprint 的实现 呼出 si bpx ntoskrnl!dbgprint 然后自己随便写个程序 只要能断点到 dbgprint 函数就ok 可以看到他调用了 vDbgPrintExWithPrefix 函数 f step into 看到这个函数把输入的字符串 vnprintf 到一个 local buffer 里面 然后调用了 DebugPrint 调用这个 DebugPrint 函数的参数有 个 后两个可以不去研究 第一个参数是一个 STRING 变量的指针 这个变量构造在 kernel 栈里面 他字符串的 buffer 也是构造在 kernel 栈里面 step into DebugPrint 函数 他也是简单的调用 DebugService 函数 这个函数同样是 个参数 第一个 表示了 调用类型 = debugprint 还有其他的数值 比如用于 image load 等等 这里我没有详细的研究 只是了解 = debugprint 第二个参数是 STRING 变量的实际字符串指针 第三个参数是字符串的长度 记好这几个参数 step into DebugService里面 这个函数就是真正的实现所在了 可以看到 他把 调用类型放到了 eax 里面 字符指针放入 ecx 里面 字符长度放入 edx 里面 然后执行了一个 int d idt 看看 d 这个中断指向的是 dbgmsg sys 再看看这个文件是属于 driverstudio 的 看到这里 你应该明白了 如果我们要获取dbgprint输出字符串 只用替换掉 d 这个中断就ok了 这个也是 dbgmsg sys 的做法 如果没有安装 driverstuido的话 这个中断指向的是 ntoskrnl exe 的 _KiDebugService     总结下 我们要写一个新的中断句柄 替换掉原来的中断处理(当然要记得 jmp 到原来的处理函数里面) 在这个处理函数里面 当 eax= 的时候表示 这次是由 dbgprint 引起的 这个时候 ecx 指向了字符串的首地址 edx 为字符串的长度(这个数据基本可以不使用) 这样我们就截获到了 dbgprint 的输出了 剩下的就只是实现而已 至于中断的修改 无非是 sidt 到 idtr 的值 索引 到 d 中断的入口 保存 修改而已     这里我们就已经获取到了输出的字符串 剩下一个问题 怎么把这个显示出来 这个也简单了 也就是一个驱动和应用程序通讯的问题 实现方式多种多样 用一个最普通的方式就行了 用 event object 每当驱动获取到了一个字符串 他就把一个 event 设置成 signaled 应用程序 wait 在这个 event 上面 如果 event 变成 signaled 应用程序就 readfile 一下驱动 驱动就返回读取到的字符串 这里的实现都是细节问题了 做成什么样子的完全看你自己的发挥     到这里就写完了 放上源代码     编译环境 + win ifs ddk    运行环境 windows     首先用 drivermonitor 加载编译出来的 dbgview sys 文件    然后运行 dbgmonitor就行了    代码写得很简陋 我也是初学者 难免有错的地方 请包涵     再次声明 代码的运行环境入上 任何非以上环境的朋友请亲自跟踪 dbgprint 函数明白 传人到 int d 的参数以后 再修改本代码 以适合你自己的操作系统 切记 否则 bugcheck 引起的后果自负 起码在 windows 下面 这个代码是不能运行的 xp 下面没有测试过 cha138/Article/program/net/201311/13300

相关参考

知识大全 WIN7系统右下角电脑图标显示连接正常,可就是不能上网~

WIN7系统右下角电脑图标显示连接正常,可就是不能上网~!  以下文字资料是由(历史新知网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!W

知识大全 U盘启动盘装Win10系统后不显示磁盘盘符怎么处理

U盘启动盘装Win10系统后不显示磁盘盘符怎么处理  以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!U盘

知识大全 asp.net 控件开发(一)显示控件内容

  控件的显示自然会离不开输出cssjavascript等前台的显示内容所以开发一个控件的时候第一件事就是要知道如何输出客户端要显示的内容一选择基类    &n

知识大全 asp.net控件开发(一)-显示控件内容

  控件的显示自然会离不开输出HTMLCSSJavascript等前台的显示内容所以开发一个控件的时候第一件事就是要知道如何输出客户端要显示的内容  一选择基类  中所有的标准控件都可以拿过来作为基类

知识大全 刚装好WIN7家庭普通版操作系统桌面上只有一个回收站的图标如何让别的图标显示出来

刚装好WIN7家庭普通版操作系统桌面上只有一个回收站的图标如何让别的图标显示出来  以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的内容,

知识大全 ASP.NET中显示Linq To SQL输出的SQL语句

ASP.NET中显示LinqToSQL输出的SQL语句  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 win7家庭基础版怎样显示桌面图标

win7家庭基础版怎样显示桌面图标但是win7homebasic版本没有“个性化”。点击开始,在最底下的搜索栏里键入"桌面"或者"显示"或者“ico”中任意一个,搜索结果中,会出现“显示或隐藏桌面上的

知识大全 win10怎么显示我的电脑图示

win10怎么显示我的电脑图示首先在Win10桌面空白处右键,在弹出的选单中选择【个性化】进入Win10桌面个性化设定后,再点选侧面的更改桌面图示进入桌面图示设定后,我们在桌面图示下面的【计算机】前面

知识大全 怎样在win10桌面显示我的电脑

怎样在win10桌面显示我的电脑win10如何显示我的电脑在桌面(方法1)1首先,我们可以看到桌面上面没有我的电脑。2我们在桌面空白处点击右键,选择“个性化”。3然后选择“更改桌面图标”,如图示。4在

知识大全 win10怎么显示我的电脑

win10怎么显示我的电脑是否卡了,或显示慢刷新试试1、桌面--右键--个性化--更改桌面图标--勾选要在桌面展现2、打开腾讯电脑管家——电脑诊所——桌面图标——自助攻略——【桌面所有图标都消失】1.