(33)调试驱动程序
一、驱动和应用程序在调试上的区别
接上一节课,我们学习了如何运行一个驱动,今天,学习如何调试驱动。
我们以前编写应用程序,可以直接在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)调试驱动程序相关推荐
- signature=d6661ffc104d47cc8a8c4281f77bbffc,调试驱动程序的入口
IopLoadDriver MmLoadSystemImage DbgLoadImageSymbols DriverEntry ==================================== ...
- android 调试驱动程序,Android驱动程序开发和调试环境配置
本文用<Android深度探索(卷1):HAL与驱动开发>的随书源代码为例详细说明如何配置Android驱动开发和测试环境,并且如何使用源代码中的build.sh脚本文件在各种平台(Ubu ...
- linux驱动程序调试方法
驱动程序开发的一个重大难点就是不易调试. 本文目的就是介绍驱动开发中常用的几种直接和间接的调试手段,它们是: 利用printk 查看OOP消息 利用strace 利用内核内置的hacking选项 利用 ...
- linux 程序退出 调试,linux驱动程序调试常用方法(printk,OOP,strace,hacking,ioctl,/proc,kgdb)...
驱动程序开发的一个重大难点就是不易调试.本文目的就是介绍驱动开发中常用的几种直接和间接的调试手段,它们是: 利用printk 查看OOP消息 利用strace 利用内核内置的hacking选项 利用i ...
- linux提取驱动程序,linux驱动程序调试常用方法
驱动程序开发的一个重大难点就是不易调试.本文目的就是介绍驱动开发中常用的几种直接和间接的调试手段,它们是: 利用printk 查看OOP消息 利用strace 利用内核内置的hacking选项 利用i ...
- 驱动程序调试常用方法
转自http://blog.csdn.net/caijp1090/article/details/7471862 驱动程序开发的一个重大难点就是不易调试.本文目的就是介绍驱动开发中常用的几种直接和间接 ...
- [Debug]驱动程序调测方法与技巧
转自:http://blog.csdn.net/lichangc/article/details/43272457 驱动程序开发的一个重大难点就是不易调试.本文目的就是介绍驱动开发中常用的几种直接和间 ...
- Linux驱动程序编写
工作需要写了我们公司一块网卡的Linux驱动程序.经历一个从无到有的过程,深感技术交流的重要.Linux作为挑战微 软垄断的强有力武器,日益受到大家的喜爱.真希望她能在中国迅速成长.把程序文档贴出来, ...
- Linux网卡驱动程序编写
Linux网卡驱动程序编写 [摘自 LinuxAID] 工作需要写了我们公司一块网卡的Linux驱动程序.经历一个从无到有的过程,深感技术交流的重要.Linux作为挑战微软垄断的强有力武器,日益受到大 ...
最新文章
- linux中时间戳与date的互转
- 如何解决两个相邻的span中间空隙
- 迪士尼“新顶流”,火不到娱乐圈
- 数据库mysql存储过程_[数据库]mysql存储过程的建立及使用
- Redis系列教程(二):详解Redis的存储类型、集群架构、以及应用场景
- python无限循环的关键字_零基础学python-12.2 关键字pass,else,break,continue
- OSChina 周五乱弹 —— 你用学习机来搞学习?
- 【ASP.NET Web API教程】2 创建各种Web API
- 推荐一个完美的计算机科学的视频集
- 「第六篇」0day漏洞
- 死磕 Framework准没错,大把的高薪岗位等着你~
- pegasus 简介
- 代码审查工具FxCop建议采用的规则总结
- 万向区块链蜂巢学院 | 关于ETH2.0路线图,搞研究的大脑在想什么?
- 基于深度学习的汽车行业评论文本的情感分析
- 使用Excel2010条码控件碰到的问题及解决办法
- SMTP/POP3协议
- 病理学技术师题库(含答案)
- SEO人员,如何打好免费流量与付费流量的组合拳?
- MIT-6.s081-OS mid-term quiz 2019
热门文章
- python文本编辑pycharm_PyCharm的基本使用
- 正点原子stm32f429 pcb_正点原子【STM32-F407探索者】第十六章 电容触摸按键实验
- php 打印mysql错误日志_PHP error_log()函数处理错误日志
- DL之LSTM:tf.contrib.rnn.BasicLSTMCell(rnn_unit)函数的解读
- Interview:算法岗位面试—10.25早上—上海某电公司算法岗位(偏图像算法,国企)技术面试之比赛历程、项目收获(Pytorch和Tensorflow)、未来方向
- ML之K-means:基于K-means算法利用电影数据集实现对top 100 电影进行文档分类
- 成功解决如何去掉输出字典,前边的dict_keys
- 【题解】hdu 3586 Information Disturbing 二分 树形dp
- 安卓手机开机键失灵,FASTBOOT模式ADB重启
- 【HDU 5184】 Brackets (卡特兰数)