大家都知道 driver studio 带一个 drivermonitor 的工具,能显示程序里面由 dbgprint 输出的字符串,这里说说他的工作原理,本人也是初学者,不对的地方,请指教.

先说自己的平台环境,使用 win2003 build 3790 rtm 版,这个很重要,dbgprint 的实现在各个平台上是有差异的,这里只是说以上平台的实现,因为我也没有在其他平台上试过,所有下面的程序,如果您想运行的话,请您先看完这个文章,再动手,否则遇到 bugcheck ,别怪我没有提醒.

先说 dbgprint 的实现,呼出 si , bpx ntoskrnl!dbgprint ,然后自己随便写个程序,只要能断点到 dbgprint 函数就ok,可以看到他调用了 vDbgPrintExWithPrefix 函数,f8,step into 看到这个函数把输入的字符串 vnprintf 到一个 local buffer 里面,然后调用了 DebugPrint ,调用这个 DebugPrint 函数的参数有 3 个,后两个可以不去研究,第一个参数是一个 STRING 变量的指针,这个变量构造在 kernel 栈里面,他字符串的 buffer 也是构造在 kernel 栈里面, step into DebugPrint 函数,他也是简单的调用 DebugService 函数,这个函数同样是3个参数,第一个 表示了 调用类型 1 = debugprint,还有其他的数值,比如用于 image load 等等,这里我没有详细的研究,只是了解1 = debugprint,第二个参数是 STRING 变量的实际字符串指针,第三个参数是字符串的长度.记好这几个参数,step into DebugService里面,这个函数就是真正的实现所在了,可以看到,他把 调用类型放到了 eax 里面,字符指针放入 ecx 里面,字符长度放入 edx 里面,然后执行了一个 int 2d. idt 看看 2d 这个中断指向的是 dbgmsg.sys,再看看这个文件是属于 driverstudio 的,看到这里,你应该明白了,如果我们要获取dbgprint输出字符串,只用替换掉 2d 这个中断就ok了.这个也是 dbgmsg.sys 的做法,如果没有安装 driverstuido的话,这个中断指向的是 ntoskrnl.exe 的 _KiDebugService.

总结下,我们要写一个新的中断句柄,替换掉原来的中断处理(当然要记得 jmp 到原来的处理函数里面),在这个处理函数里面,当 eax=1 的时候表示 这次是由 dbgprint 引起的,这个时候 ecx 指向了字符串的首地址,edx 为字符串的长度(这个数据基本可以不使用).这样我们就截获到了 dbgprint 的输出了.剩下的就只是实现而已.至于中断的修改,无非是 sidt 到 idtr 的值,索引 到 2d 中断的入口,保存,修改而已.

这里我们就已经获取到了输出的字符串.剩下一个问题,怎么把这个显示出来,这个也简单了,也就是一个驱动和应用程序通讯的问题,实现方式多种多样,用一个最普通的方式就行了,用 event object,每当驱动获取到了一个字符串,他就把一个 event 设置成 signaled,应用程序 wait 在这个 event 上面,如果 event 变成 signaled,应用程序就 readfile 一下驱动,驱动就返回读取到的字符串...这里的实现都是细节问题了,做成什么样子的完全看你自己的发挥.

到这里就写完了.放上源代码.

编译环境 vs.net 2003 + win2003.ifs.ddk
运行环境 windows 2003

首先用 drivermonitor 加载编译出来的 dbgview.sys 文件
然后运行 dbgmonitor就行了

代码写得很简陋...我也是初学者..难免有错的地方..请包涵..

再次声明...代码的运行环境入上...任何非以上环境的朋友请亲自跟踪 dbgprint 函数明白 传人到 int 2d 的参数以后,再修改本代码,以适合你自己的操作系统,切记....否则 bugcheck 引起的后果自负...起码在 windows 2000 下面,这个代码是不能运行的. xp 下面没有测试过...

附件: 2004-03-30_dbgview.rar (254 K)
下载次数:39

win2003下面显示dbgprint的输出内容相关推荐

  1. shell 密码输入不显示,Shell输出内容不显示密码,Shell实现有密码自动登录sshpass 应用实践...

    在很多实践项目中,我们经常会通过SSH来进行认证,如通过SSH拷贝文件,虽然我们可以使用公钥与私钥实现ssh 无密码登录,在不同的服务器上又需要配对相应的密钥,切换用户麻烦等问题,在一些需要交互但会涉 ...

  2. html控制台 打印 consol,浏览器console.log()打印输出台不显示输出内容……

    浏览器console.log()打印输出台不显示输出内容的原因应该很多,如网络上所说:console.log()被重新定义等等原因(需要验证真实性?)都可能导致console.log()打印不能显示打 ...

  3. Windbg下无法显示dbgPrint输出的信息

    Windbg下无法显示dbgPrint输出的信息 http://blog.csdn.net/happy987818/article/details/50516236 刚开始使用Windbg进行内核驱动 ...

  4. php输出网络连接,如何打开php文件和输出内容

    php是什么文件?php文件如何打开?如何输出php内容?我们经常会遇到一些以php格式.php结尾的文件,对于不认识这种文件是什么,又不知道怎么打开php文件,下面网络自学网就来详细介绍什么php文 ...

  5. php 输出函数结果,PHP向浏览器输出内容的4个函数总结

    这篇文章主要介绍了PHP向浏览器输出内容的4个函数总结,本文总结的就是print().echo().printf().sprintf()这4个输出函数,需要的朋友可以参考下 /* * 0x01:pri ...

  6. MFC匿名管道原理详解、函数总结、调用实例(用MFC的匿名管道读取CMD输出内容)(C++语言)

    本博客主要总结MFC中匿名管道的原理和具体调用实例,以及调用匿名管道三个核心函数各个参数用法详解,具体的如下所述. 博主在做项目时,遇到一个问题.用程序调用一个进程,然后读取进程输出信息.但是,博主用 ...

  7. linux将屏幕输出到文件,Linux命令执行的屏幕输出内容重定向到日志文件

    摘要: 作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 快速mark一下这个命令细节,免得以后使用又忘记了 大家都知道可以用echo来输出内容到 ...

  8. JavaScript知识笔记(一)——入门、语句、注释、变量、函数、输出内容、对话框、窗口

    JavaScript可以提供漂亮的网页.令用户满意的上网体验. 1.增强页面动态效果(如:下拉菜单.图片轮播.信息滚动等) 2.实现页面与用户之间的实时.动态交互(如:用户注册.登陆验证等) 引用Ja ...

  9. phpcms v9输出内容过滤html代码 - 代码篇

    phpcms v9输出内容过滤html代码 - 代码篇 代码: //图1 :未过滤 {str_cut($r[content],330,'······')}//图2 :已过滤 {str_cut(stri ...

最新文章

  1. java在线聊天项目0.4版本 制作服务端接收连接,客户端连接功能 新增客户端窗口打开时光标指向下边文本域功能,使用WindowListener监听WindowAdapter...
  2. 一本书学会可视化设计 pdf_「读书」数据之美-一本书学会可视化设计
  3. GMA Round 1 三视图
  4. vue学习代码理解v-for数组遍历和对象遍历以及事件处理
  5. Linux/Unix 中 wheel 组的来源
  6. 为什么开发人员必须要了解数据库锁?
  7. 关于 The SqlParameter is already contained by another SqlParameterCollection 报错的解决方案
  8. 一篇文章读懂NHTSA自动驾驶分级(转)
  9. 2019年年终总结~平淡生活
  10. 在一座办公楼内 各是计算机连成网络 属于,在一座办公楼内各室计算机连成网络属于...
  11. 【Mysql系列】游标/光标简介
  12. VUEecharts图表之得分环
  13. 妻子决定你未来事业的高度,男的看一看,女的学一学
  14. LTspice introduction - 5 Complex and AC analysis
  15. 屌丝站长如何购买虚拟主机?
  16. 微信小程序抓包方法汇总
  17. JavaScript对XML的一些DOM操作
  18. KiCAD元件库快速制作
  19. C++开发常用工具“群英会”
  20. 实验室信息管理系统的架构说明

热门文章

  1. 编程的7个主要步骤:
  2. 机器学习笔记(十三)——隐马尔科夫模型
  3. tilemap 菱形_使用Cocos creator制作【治愈七夕】-音乐游戏图形api绘制跳舞的线
  4. pythonweb开发工作内容_我的第一个python web开发框架(5)——开发前准备工作(了解编码前需要知道的一些常识)...
  5. sql怎么撤回update_零基础快速自学SQL,2天足矣!
  6. 2015年《大数据》高被引论文Top10文章No.2——大数据时代的数据挖掘 —— 从应用的角度看大数据挖掘(上)...
  7. 【数据库系统】DBMS、DBS、DBA、DB的区别
  8. 浅析laravel门面原理与实现
  9. 直播PK短视频?直播+短视频才是王道
  10. 【转】贝塞尔曲线介绍