- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
在驱动程序开发使用静态分析工具
在驱动程序开发中使用静态分析工具
Adam Shapiro
Senior Program Manager
US-Networking Core PM
议程
静态分析工具
什么是静态分析?
静态分析工具的优点
下一版Windows将有哪些更新?
PREfast for Drivers (PFD)
核心的PREfast代码注解(annotations)
Static Driver Verifier (SDV)
RoleTypes
总结
什么是静态分析?
源代码的编译期间分析
类似于代码走查, 但由工具来完成
一个简单的例子就是编译期间的类型检查
检查对定义完善的限制条件的违反
过程调用约定和API约定
由静态检查工具发现的代码错误示例
f()要求p不为NULL:
重复结束同一个IRP:
IoCompleteRequest (Irp);
...
IoCompleteRequest (Irp);
p = NULL;
…
f(p);
为什么使用静态分析?
低级代码错误!
经验法则
“如果有一个缺陷在程序员的桌面上修正要花1美元,那么一旦这个缺陷已经被集成到完成的程序中,将需要100美元来修正,如果在软件被应用部署之后才发现这一缺陷,代价将达到数万美元。”
“Building a Better Bug Trap” — The Economist June 2003
工具可以提高你的效率
按钮技术
100%的路径覆盖率
成本低(让计算机帮你做)
快速 (计算机在几分钟或几小时内完成几个星期的人力工作)
尽早发现缺陷
甚至在拿到硬件设备之前
在设计测试用例之前
在平常写代码的时候
缺陷报告容易使用
在源代码中直接给出缺陷路径(或者是关键点),降低调试代码的成本
静态分析如何工作?
建立一个驱动的抽象模型,沿着所有路径完整检查执行代码
抽象模型更简单:被简化了…
简化到能够完整检查(模拟)的程度
跟驱动程序近似
控制部分保持一致
保留所有路径并同等对待
数据状态是近似的
如果参数x无约束条件, 假定一切值都是可能的。
如果(x0)在测试点是成立的, 维护布尔值(x0),而不是x的整数值:布尔值比整数值更简单
If (x 0) { IoCompleteRequest (Irp); }
静态检查工具不是银弹
不是替代功能测试
针对违反定义良好的约束条件
局限性
不可能知道所有会发生错误
算法是基于源代码的抽象和启发
结果可能是错误的肯定和错误否定
是个好用的工具
静态分析工具比较
PREfast for Drivers
Static Driver Verifier
驱动模型
任意
WDM
KMDF
NDIS
语言
C和C++
只支持C
发现的问题
本地的缺陷
易于修正
大规模
全局的缺陷
难以修正
小规模
范围
进程级
本地的违例
进程间
发现深层错误
开发周期
早期使用:
“编译驱动的时候”
运行仅需几分钟,所以请经常运行
后期使用:
“驱动基本结构成形的时候”
定期运行, 修正错误后运行
KMDF验证平均需时 = 20 min
WDM验证平均需时= 40 min
两种静态分析工具并用
WDK中提供的两种互补技术
PREfast for Drivers: 在每个进程中深度分析可能的违例
Static Driver Verifier: 延执行路径,跨进程间的边界
ReadFoo ( PIRP Irp )
{
...
status = Bar (Irp);
if (status) {
IoCompleteRequest(Irp);
}
}
Bar ( PIRP Irp )
{
...
IoCompleteRequest(Irp);
return STATUS_SUCCESS;
}
两种静态分析工具并用示例
ReadFoo ( PIRP Irp )
{
PIRP p = NULL;
...
if (status) {
IoCompleteRequest(p);
}
}
PFD有什么更新?
微软内部推动 “PFD Clean”
Windows 7 – Microsoft拥有的内置驱动和WDK范例完全通过PFD
微软的驱动和WDK的公共头文件都有注解
内部引擎的改进
表达式的范围更广
支持常量, 成员名字, 无副作用的C表达式
更好的注解错误检查
WDK中包含部分微软自动代码检查(OACR)
SDV有什么更新
内置驱动和 WDK KMDF, WDM范例通过SDV
针对NDIS的SDV – 和NDIS组无缝的合作
为NDIS驱动新增39个新规则
针对WDM和KMDF的扩展规则集
可靠性, 安全性, IRQL, 同步, 正确的对象创建规则
您可能关注的文档
最近下载
- 2025至2030年中国报废汽车回收拆解行业市场运行现状及投资规划建议报告.docx
- Unit 2 What do you like about your family Period 1 Ready Go & Sound 教学设计 沪教版(2025)二年级英语上册.docx VIP
- 食品添加剂 甲醇钠标准2023年.docx VIP
- 高一语文上学期《乡土中国》-差序格局教学课件.pptx VIP
- 企业安全生产检查标准化表格.doc VIP
- 中成药的临床合理应用试卷含答案.docx
- 《HIV病毒与艾滋病》课件.ppt VIP
- 第二单元第1课《因地制宜》课件-2025-2026学年人教版(2024)八年级上册.pptx VIP
- 高标准农田建设标准NYT2148-2012.pdf VIP
- 世界少年奥林匹克数学竞赛(中国区)选拔赛省级选拔模拟卷(三)三年级试题(含解析)2025年5月夏季.docx VIP
原创力文档


文档评论(0)