一、驱动和应用程序在调试上的区别

接上一节课,我们学习了如何运行一个驱动,今天,学习如何调试驱动。
我们以前编写应用程序,可以直接在IDE里调试,VS,OD这些都是三环调试器。驱动运行在内核层,需要使用windbg,配合PDB文件调试。

二、PDB文件

PDB文件是编译驱动的同时生成的调试信息文件,它可以帮助我们像调试应用程序一样调试驱动程序。其实之前我们已经使用过PDB,我们配置双机调试环境时,在物理机上安装了符号文件,并在windbg中导入过。

有了PDB,我们就可以知道当前汇编语句属于哪个函数,程序定义的结构体等关键信息,说一句题外话,软件发布的时候,切记不要把PDB也发布出去,因为这会给别人破解你的软件提供巨大便利。

三、配置PDB路径

需要在windbg中设置PDB路径,我们要找到驱动程序和PDB所在的目录:

在windbg中打开符号文件路径,将上面的路径粘贴进去,用分号隔开多个条目:

不要忘记勾选reload

三、调试驱动

对上节课的代码稍作修改,添加了断点:

#include <ntddk.h>// 卸载函数
VOID DriverUnload(PDRIVER_OBJECT driver)
{DbgPrint("驱动程序停止运行了.\r\n");
}// 入口函数,相当于main
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{// 下断点__asm {int 3mov eax,eaxmov ecx,ecx}// 驱动程序入口DbgPrint("hambaga的第一个驱动程序.\r\n");  // 设置一个卸载函数,便于退出driver->DriverUnload = DriverUnload;return STATUS_SUCCESS;
}

按照上一节课的办法,运行驱动:

可以看到,触发断点了,观察windbg窗口:

多了一个源代码窗口,现在可以像调试应用程序一样调试驱动了。

(33)调试驱动程序相关推荐

  1. signature=d6661ffc104d47cc8a8c4281f77bbffc,调试驱动程序的入口

    IopLoadDriver MmLoadSystemImage DbgLoadImageSymbols DriverEntry ==================================== ...

  2. android 调试驱动程序,Android驱动程序开发和调试环境配置

    本文用<Android深度探索(卷1):HAL与驱动开发>的随书源代码为例详细说明如何配置Android驱动开发和测试环境,并且如何使用源代码中的build.sh脚本文件在各种平台(Ubu ...

  3. linux驱动程序调试方法

    驱动程序开发的一个重大难点就是不易调试. 本文目的就是介绍驱动开发中常用的几种直接和间接的调试手段,它们是: 利用printk 查看OOP消息 利用strace 利用内核内置的hacking选项 利用 ...

  4. linux 程序退出 调试,linux驱动程序调试常用方法(printk,OOP,strace,hacking,ioctl,/proc,kgdb)...

    驱动程序开发的一个重大难点就是不易调试.本文目的就是介绍驱动开发中常用的几种直接和间接的调试手段,它们是: 利用printk 查看OOP消息 利用strace 利用内核内置的hacking选项 利用i ...

  5. linux提取驱动程序,linux驱动程序调试常用方法

    驱动程序开发的一个重大难点就是不易调试.本文目的就是介绍驱动开发中常用的几种直接和间接的调试手段,它们是: 利用printk 查看OOP消息 利用strace 利用内核内置的hacking选项 利用i ...

  6. 驱动程序调试常用方法

    转自http://blog.csdn.net/caijp1090/article/details/7471862 驱动程序开发的一个重大难点就是不易调试.本文目的就是介绍驱动开发中常用的几种直接和间接 ...

  7. [Debug]驱动程序调测方法与技巧

    转自:http://blog.csdn.net/lichangc/article/details/43272457 驱动程序开发的一个重大难点就是不易调试.本文目的就是介绍驱动开发中常用的几种直接和间 ...

  8. Linux驱动程序编写

    工作需要写了我们公司一块网卡的Linux驱动程序.经历一个从无到有的过程,深感技术交流的重要.Linux作为挑战微 软垄断的强有力武器,日益受到大家的喜爱.真希望她能在中国迅速成长.把程序文档贴出来, ...

  9. Linux网卡驱动程序编写

    Linux网卡驱动程序编写 [摘自 LinuxAID] 工作需要写了我们公司一块网卡的Linux驱动程序.经历一个从无到有的过程,深感技术交流的重要.Linux作为挑战微软垄断的强有力武器,日益受到大 ...

最新文章

  1. linux中时间戳与date的互转
  2. 如何解决两个相邻的span中间空隙
  3. 迪士尼“新顶流”,火不到娱乐圈
  4. 数据库mysql存储过程_[数据库]mysql存储过程的建立及使用
  5. Redis系列教程(二):详解Redis的存储类型、集群架构、以及应用场景
  6. python无限循环的关键字_零基础学python-12.2 关键字pass,else,break,continue
  7. OSChina 周五乱弹 —— 你用学习机来搞学习?
  8. 【ASP.NET Web API教程】2 创建各种Web API
  9. 推荐一个完美的计算机科学的视频集
  10. 「第六篇」0day漏洞
  11. 死磕 Framework准没错,大把的高薪岗位等着你~
  12. pegasus 简介
  13. 代码审查工具FxCop建议采用的规则总结
  14. 万向区块链蜂巢学院 | 关于ETH2.0路线图,搞研究的大脑在想什么?
  15. 基于深度学习的汽车行业评论文本的情感分析
  16. 使用Excel2010条码控件碰到的问题及解决办法
  17. SMTP/POP3协议
  18. 病理学技术师题库(含答案)
  19. SEO人员,如何打好免费流量与付费流量的组合拳?
  20. MIT-6.s081-OS mid-term quiz 2019

热门文章

  1. python文本编辑pycharm_PyCharm的基本使用
  2. 正点原子stm32f429 pcb_正点原子【STM32-F407探索者】第十六章 电容触摸按键实验
  3. php 打印mysql错误日志_PHP error_log()函数处理错误日志
  4. DL之LSTM:tf.contrib.rnn.BasicLSTMCell(rnn_unit)函数的解读
  5. Interview:算法岗位面试—10.25早上—上海某电公司算法岗位(偏图像算法,国企)技术面试之比赛历程、项目收获(Pytorch和Tensorflow)、未来方向
  6. ML之K-means:基于K-means算法利用电影数据集实现对top 100 电影进行文档分类
  7. 成功解决如何去掉输出字典,前边的dict_keys
  8. 【题解】hdu 3586 Information Disturbing 二分 树形dp
  9. 安卓手机开机键失灵,FASTBOOT模式ADB重启
  10. 【HDU 5184】 Brackets (卡特兰数)