2015-01-06 17:25:37 Devil_box 阅读数 655

调试内核感觉很麻烦,在网上搜到的帖子倒是多,大多数都是复制粘贴过来,一搜一大堆,浪费大把的时间,简直就是在坑害人。其实我自己在这方面也不是很懂的。但是解决自己的这个问题,还是有点收获的。

在这之前要先谈一下printf和printk之间的区别:

printf 很容易理解,用户层函数,将字符打印到控制台上。

  printk,内核层函数,内核会根据日志级别,可能把消息打印到当前控制台上,这个控制台通常是一个字符模式的终端、一个串口打印机或是一个并口打印机。这些消息正常输出的前提是──日志输出级别小于console_loglevel(在内核中数字越小优先级越高)。
  没有指定日志级别的printk语句默认采用的级别是 DEFAULT_ MESSAGE_LOGLEVEL(这个默认级别一般为<4>,即与KERN_WARNING在一个级别上),其定义在linux26/kernel/printk.c中可以找到
  日志级别一共有8个级别,printk的日志级别定义如下(在include/linux/kernel.h中):
  #define KERN_EMERG 0/*紧急事件消息,系统崩溃之前提示,表示系统不可用*/
  #define KERN_ALERT 1/*报告消息,表示必须立即采取措施*/
  #define KERN_CRIT 2/*临界条件,通常涉及严重的硬件或软件操作失败*/
  #define KERN_ERR 3/*错误条件,驱动程序常用KERN_ERR来报告硬件的错误*/
  #define KERN_WARNING 4/*警告条件,对可能出现问题的情况进行警告*/
  #define KERN_NOTICE 5/*正常但又重要的条件,用于提醒*/
  #define KERN_INFO 6/*提示信息,如驱动程序启动时,打印硬件信息*/
  #define KERN_DEBUG 7/*调试级别的消息*/

在程序中可以添加调试语句(终端打印调试)

  printk(KERN_NOTICE "DevilBios hahahhahahahhahahahahahahah\n");

先改一下控制台级别:

 通过读写/proc/sys/kernel/printk文件可读取和修改控制台的日志级别。查看这个文件的方法如下:
  #cat /proc/sys/kernel/printk 6 4 1 7
  上面显示的4个数据分别对应控制台日志级别、默认的消息日志级别、最低的控制台日志级别和默认的控制台日志级别。
  可用下面的命令设置当前日志级别:
  # echo 8 > /proc/sys/kernel/printk

这样理论什么都是可以打印到控制台上面去了。

但是当我们 insmod XXX.ko 的时候并没有什么现象产生:

接下来再学一个Linux命令:dmesg

  dmesg用来显示开机信息,将kernel里的信息显示到控制台上,同理,我改变Linux里kernel内容,添加调试语句,那么调试语句也会打印到控制台 上。

dmesg用法:

-c
当完成打印显示后清除环缓冲内的内容。
-s 缓冲区大小
定义一个大小为"缓冲区大小"的缓冲区用于查询内核环缓冲区。默认大小为 8196(此大小与 2.0.33 和 2.1.103 内核的默认syslog 缓冲区大小一致),如果你设置了一个大于默认值的环缓冲区,那你就可以用这个选项定义一个相当的缓冲区来查看完整的环缓冲区内容。
-n级别
设置级别为记录控制台启动信息的级别。比如,-n 1指的就是将此级别设为最低级,除了内核恐慌信息之外不会向控制台显示信息。所有级别的启动信息还将记录到/proc/kmsg,文件中,因此,syslogd(8)同样可以用来对信息的输出进行控制。当使用-n选项时,dmesg将不会 清除内核环缓冲区中的内容。当同时使用以上两个选项时,只有最后一个选项才会产生效果

所以,在模块执行的时候,我们在终端里敲下命令dmesg,就可以看到调试语句了。


2016-02-19 12:21:20 u012541747 阅读数 1196
[作者简介] 
    常用网名: 灯火阑珊
    出生日期: 1995.XX.XX
    生理特征: 男
    个人网站: geons.cn
    E-mail:    1090700965@qq.com
    QQ交流:  1090700965
    编程级别: 菜鸟
    职业生涯: 中科院计算所
    历史岗位: 应用软件开发/系统工程
    开发语言: C/C++、C#
    开发工具: Visual Studio 

   研究领域: Windows应用软件开发/Windows驱动开发/系统逆向工程/病毒木马感染分析

[开发工具]

VS2012

[调试工具]

Windbg:和VM配合实现双机联合调试,完成双机调试功能,可以结合《软件调试》这本书对Windbg有较为深入的认识。

DebugView: 可以捕获程序中由TRACE(debug版本)和OutputDebugString输出的信息。

InstDrv:安装驱动程序的软件,也可以自己编写。

DriverMonitor:用于查看驱动程序中的各种打印信息,帮助我们进行相应的信息显示与具体的设计。

DeviceTree:设备树,查看驱动对象和设备对象。

PcHunter(XueTr):较高权限的内核对象查看工具,相当于任务管理器的加强版。

WinObj:驱动对象和设备对象的普通查看工具

[相关文章]

VS的Winobj环境配置的方法


2018-04-22 17:02:03 Zhu_Zhu_2009 阅读数 2098

WDK8之后,微软为驱动开发提供了visual studio IDE开发环境,驱动签名也自动化了,但我暂时还没用过,下面使用WDK7600提供的工具对驱动进行签名,这个签名只能用于调试目的,Windows系统必须打开测试模式。

创建self根证书

C:\WinDDK\7600.16385.1\bin\amd64>makecert -r -pe -ss ZhuCeCertStore -n CN=zhuce.com ZhuCe.cer

创建证书截图

创建驱动catalog文件(对于inf文件安装的驱动)

stampinf –d的时间格式是月/日/年,月是2位,日是2位,年是4位,不足的补0。然后执行Inf2Cat。
Infcat工作目录下不相关的其他inf文件都要删除。HSAC项目中每次编译会由HSAC.inx会生成HSAC.inf,若是出错,就删掉这个无关的inf文件。

stampinf.exe -f E:\HSAC_WDF_1_2\HSAC_WDF\objfre_win7_amd64\HSAC.inf -d 10/31/2015 -v 1.0.0000.0
cd ..\selfsign
Inf2Cat.exe /driver:E:\HSAC_WDF_1_2\HSAC_WDF\objfre_win7_amd64 /os:Vista_x64

红线所标的一个斜线,WDK文档的例子是没有的,实测这个斜杠加不加都可以执行,WDK7600中的Inf2Cat需要.NET 2.0或者3.5,如果系统没有,自行下载dotNetFx35xxxx.exe安装即可。

签名驱动文件

C:\WinDDK\7600.16385.1\bin\selfsign>cd ..\amd64
C:\WinDDK\7600.16385.1\bin\amd64>SignTool.exe sign /v /s ZhuCeCertStore /n zhuce.com /t http://timestamp.verisign.com/scripts/timestamp.dll E:\HSAC_WDF_1_2\HSAC_WDF\objfre_win7_amd64\hsacx64.cat
cd ..\amd64
SignTool.exe sign /v /s ZhuCeCertStore /n zhuce.com /t http://timestamp.verisign.com/scripts/timestamp.dll E:\HSAC_WDF\HSAC_WDF\objfre_win7_amd64\hsacx64.cat

配置电脑为测试模式

以管理员方式启动cmd,用bcdedit工具。

C:\Windows\system32>bcdedit.exe -set TESTSIGNING ON

对于win10,参考Win10驱动签名总结

bcdedit -set loadoptions DDISABLE_INTEGRITY_CHECKS
bcdedit -set TESTSIGNING ON
bcdedit -set loadoptions ENABLE_INTEGRITY_CHECKS
bcdedit -set TESTSIGNING OFF

安装self根证书

C:\Windows\system32>cd ..\..\WinDDK\7600.16385.1\bin\amd64
C:\WinDDK\7600.16385.1\bin\amd64>CertMgr.exe /add ZhuCe.cer /s /r localMachine root

至此,就完成了证书的安装,但仅仅是调试状态下的,换一台电脑必须从头操作一遍,一般签名需要花很多dollar和时间,在驱动调试时,完成签名是很方便的,尤其是在驱动双机调试的时候,必须有签名,否则驱动加载不了,是无法attach上去调试的。打开windows的证书管理器certmgr.msc,可以看到安装的证书。
这里写图片描述

总结脚本

%WDKPATH%\bin\amd64\stampinf.exe -f .\HSAC_WDF\objfre_win7_amd64\HSAC.inf -d 10/31/2015 -v 1.0.0000.0
%WDKPATH%\bin\selfsign\Inf2Cat.exe /driver:.\HSAC_WDF\objfre_win7_amd64 /os:Vista_x64
%WDKPATH%\bin\amd64\SignTool.exe sign /v /s ZhuCeCertStore /n zhuce.com /t http://timestamp.verisign.com/scripts/timestamp.dll .\HSAC_WDF\objfre_win7_amd64\hsacx64.cat

签名时系统时间一定要正确,否则证书无效

他家的工具deso13b

xp是不需要驱动签名的,Win7 32bit打开调试模式后也不需要签名,但Win7x64需要强制签名,否则每次开机F8很麻烦,这里需要用到一个工具,deso13b.exe,软件支持

  • Windows Vista 32-bit
  • Windows Vista 64-bit
  • Windows Server 2008 32-bit
  • Windows Server 2008 64-bit
  • Windows 7 32-bit
  • Windows 7 64-bit
    不知道现在有没有出新版的,软件打开如下,管理员权限
  1. 首先使能测试模式
  2. 选择Sign a System File
  3. 按提示输入驱动路径点击OK即可。典型的路径为C:\Windows\System32\drivers\HSAC.sys

Remove Watemarks去水印

在deso13b.exe中选择Remove Watemarks,会提示一个网页,外国网页打不开,自己百度这个软件名,可以下载一个去水印工具,有x86和x64版本。
运行,输入y,重启之后,水印就会消失。方便快捷。

     Remove all Watermark on desktop, such as Test Mode/Evaluation Copy.
     Version:  0.4,  01/17/2009
     Support:  Windows Vista /Server 2008 /Windows 7,  32bit(x64)
               All Service Pack & all language of Windows.
     Author:   deepxw
     Blog:     http://deepxw.lingd.net
               http://deepxw.blogspot.com   (English)
Please right click the exe file, run as administrator, and dsiable UAC.
Do you really want to apply this patch?
(Y=Yes  /  N=No )
Y
2018-04-25 00:17:28 loongsking 阅读数 648

使用Windows新一代驱动开发使用内核模式WDF开发,输出调试信息,并且只希望使用debug配置发布驱动文件时,输出调试信息,使用release配置发布驱动文件不输出驱动调试信息。

使用DBG宏进行配置。

代码示例:

#if DBG
    EchoPrintDriverVersion();
#endif

2017-03-08 17:33:32 u013605639 阅读数 288

Windows驱动开发:2 调试环境搭建

这篇给大家讲讲调试环境的搭建
搭建调试环境的话 我建议大家使用VirtualKD配合WinDbg的方式
有了VirtualKD这个辅助工具 调试就是快!

首先给大家介绍需要的工具:


  1. VMware Workstation Pro 12 https://www.vmware.com/products/workstation.html
  2. VirtualKD 3.0 http://virtualkd.sysprogs.org/download/
  3. WinDbg https://developer.microsoft.com/zh-cn/windows/hardware/windows-driver-kit
  4. 一个Windows操作系统镜像 http://www.itellyou.cn/

  1. 安装VMware Workstation Pro
  2. 在VMware中安装操作系统
  3. 安装VMware Tools
    以上三步不做过多介绍
  4. 在虚拟机中安装VirtualKD
    第一步:首先解压缩VirtualKD 进入VirtualKD目录找到target文件夹 把target文件夹复制到虚拟机内
    第二步:在虚拟机中进入target目录下打开vminstall(以管理员权限打开)点击install
    install
    此时虚拟机会自动重启 重启之后进入启动管理器
    启动管理器
    此时选择第一个进入系统即 Windows 10
    因为在Windows 10上需要再次设置即可调试
    进入系统后 运行msconfig
    选择引导选项 选择第二个Disable Signature Enforcement Manually!!! (Press F8) [VirtualKD] 进入高级选项
    引导配置
    此时勾选上调试 勾选上调试端口 选择COM1: 勾选波特率设置为115200点击确定
    设置
    重启机器 在启动管理中等待
  5. 设置VirtualKD与WinDbg
    打开VirtualKD目录下vmmon64 等界面找到Pipe name
    VirtualKD
    选择Debugger path 输入Windbg目录路径 选择windbg.exe 点击确定即可
    Windbg Path
    此时 切换到虚拟机中 在启动管理器中按下F8 选择禁用驱动程序强制签名
    F8
    此时 Windbg弹出
    Windbg
    这个时候 点击菜单栏File 选择 Symbol File Path
    Symbol
    选择设置如下
    set
SRV*C:\Symbol* http://msdl.microsoft.com/download/symbols

勾选Reload 确定即可 等待Windbg加载符号表完成后就可以愉快的玩耍咯!
6. 调试输出设置

Windows Registry Editor Version 5.00


[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter]
"DEFAULT"=dword:0000000f

代码保存为.reg 在虚拟机中双击后 重启。
进入启动管理器按下F8 选择禁用驱动强制签名即可!
此时我们就可以愉快的玩耍了!

没有更多推荐了,返回首页