对<源码级调试WDF框架>一文进行补充
来源:互联网 发布:手机隐藏软件下载 编辑:程序博客网 时间:2024/06/04 16:47
MS 曾在他的Github站点上提出过《源码级调试WDF框架》的方法,文中提到通过.srcfix命令使windbg源码服务器路径指向MS的源码服务器。这样当调试到wdf框架代码时,windbg会去源码服务器下载对应的源码并加载显示在源码窗口。
我尝试过这种方法,然而结果并不像预计的那样:
0: kd> .reload /f wdf01000.sys0: kd> !lmi wdf01000.sysLoaded Module Info: [wdf01000.sys] ... Compiler: C - front end [19.10 bld 25203] - back end [19.10 bld 25203] Load Report: private symbols & lines, source indexed C:\Users\q50292th\Desktop\devtools\windbg v10\x64\sym\Wdf01000.pdb\98BFF4E535208A77013A260DE4A248201\Wdf01000.pdb0: kd> lsa Wdf01000!FxDevice::DispatchWithLockNo source found for 'minkernel\wdf\framework\shared\core\fxdevice.cpp'在显示源码过程中,windbg会启动一个功能类似svn客户端的程序,尝试去下载源文件并保存到windbg目录的src目录下。但是不知道是不是GWF的原因,源文件一直无法获得和显示。导致了上面lsa命令运行失败。
那么,是不是就不支持源码级调试WDF框架?倒也不是。办法还是有的。MS还是好心把Wdf框架的源码全部放在GitHub上,可以把源码下到本地,然后运行如下命令:
.srcfix C:\srcfix\Windows-Driver-Frameworks-master\src\framework ;我将GitHub上的代码解压保存到C:\srcfix\Windows-Driver-Frame-master下
这是我机器上.srcpath显示的结果:
kd> .srcpathSource search path is: SRV*;C:\srcfix\Windows-Driver-Frameworks-master\src\framework;另外还需要安装Driver kit,因为调试过程中windbg会尝试去C:\Program Files (x86)\Windows Kits\目录下搜索头文件。如果搜索不到,还是不支持源码级调试。
经过以上设置,基本能实现源码级调试WDF框架~以MS toast(wdfsimple.sys)为例,进入WdfSimple!DriverEntry并调用WdfDriverCreate函数后的调用堆栈:
kd> kbRetAddr : Args to Child : Call Sitefffff803`aed21206 : 00000000`00000000 fffff803`aed211c4 00000000`00000010 00000000`00000344 : Wdf01000!imp_WdfDriverCreate+0x44 [minkernel\wdf\framework\shared\core\fxdriverapi.cpp @ 105]fffff803`aed26053 : ffff920f`b8929a00 ffff920f`b94be000 00000000`00000000 ffff8384`57c7d2d8 : wdfsimple!WdfDriverCreate+0x56 [c:\program files (x86)\windows kits\10\include\wdf\kmdf\1.15\wdfdriver.h @ 239]fffff803`aed21499 : ffff920f`b8929a00 ffff920f`b94be000 ffffb889`e5b548d0 ffff920f`b89d87c0 : wdfsimple!DriverEntry+0x53 [f:\twl\general\toaster\toastdrv\kmdf\func\simple\toaster.c @ 93]fffff801`856e257a : 00000000`00000000 ffff8384`57c7d440 ffff920f`b8929a00 ffffffff`80002328 : wdfsimple!FxDriverEntryWorker+0xb9 [d:\th\minkernel\wdf\framework\kmdf\src\dynamic\stub\stub.cpp @ 325]以及对应的Wdf函数源码:
kd> .frame 101 ffff8384`57c7d260 fffff803`aed26053 wdfsimple!WdfDriverCreate+0x56 [c:\program files (x86)\windows kits\10\include\wdf\kmdf\1.15\wdfdriver.h @ 239]kd> lsa fffff803`aed26053 89: 90: // 91: // Create a framework driver object to represent our driver. 92: //> 93: status = WdfDriverCreate( 94: DriverObject, 95: RegistryPath, 96: WDF_NO_OBJECT_ATTRIBUTES, // Driver Attributes 97: &config, // Driver Config Info 98: WDF_NO_HANDLEkd> .frame 000 ffff8384`57c7d0d0 fffff803`aed21206 Wdf01000!imp_WdfDriverCreate+0x44 [minkernel\wdf\framework\shared\core\fxdriverapi.cpp @ 105]kd> lsa fffff803`aed21206 235: WDFDRIVER* Driver 236: ) 237: { 238: return ((PFN_WDFDRIVERCREATE) WdfFunctions[WdfDriverCreateTableIndex])(WdfDriverGlobals, DriverObject, RegistryPath, DriverAttributes, DriverConfig, Driver);> 239: } 240: 241: // 242: // WDF Function: WdfDriverGetRegistryPath 243: // 244: typedef
目标实现~
参考:Debugging with WDF Source阅读全文
0 0
- 对<源码级调试WDF框架>一文进行补充
- 源码级调试WDF框架
- Flume源码分析—利用Eclipse对Flume源码进行远程调试分析环境搭建(一)
- Flume源码分析—利用Eclipse对Flume源码进行远程调试分析环境搭建(一)
- ubuntu下使用skyeye对u-boot进行源码级调试
- WDF设备驱动框架
- Eclipse3.6与m2eclipse,run-jetty-run插件对WEB项目进行热部署以及在jar源码中进行调试(一)
- Eclipse3.6与m2eclipse,run-jetty-run插件对WEB项目进行热部署以及在jar源码中进行调试(一)
- Eclipse3.6与m2eclipse,run-jetty-run插件对WEB项目进行热部署以及在jar源码中进行调试(一)
- 利用qemu进行内核源码级调试
- 使用qemu进行内核源码级调试
- 利用qemu进行内核源码级调试
- 利用qemu进行内核源码级调试
- 利用qemu进行内核源码级调试
- 利用qemu进行内核源码级调试
- 利用qemu进行内核源码级调试
- "对几组sizeof信息的分析"一文补充
- 对在Qtopia中添加国际化支持一文补充
- 腾讯副总裁曾宇:谈谈腾讯的技术价值观与技术人才修炼
- 简述spring加载注解的过程
- 欢迎使用CSDN-markdown编辑器
- setStrokeWidth() 方法思考
- final内联函数
- 对<源码级调试WDF框架>一文进行补充
- android精选源码,知乎阅读瀑布流loading弹窗扫描二维码简洁的MVP
- Linux 环境下的抓包工具
- 紫书第六章-----数据结构基础(数组模拟链表)
- 聚类
- OpenGL glm库的投影矩阵公式 glm::perspective
- Class<?> 方法和构造
- Fragment切换(show() and hide())
- qrcode(二)