尝试调试Fastfat(Fat32)文件系统

来源:互联网 发布:视频软件开发公司 编辑:程序博客网 时间:2024/05/22 09:01

本文内容:

说一下怎么才能够调试FAT文件系统,其实步骤比较简单,但是当我第一次想要调试它的时候还是一头雾水,不知道从何下手,驱网上一个网友(dreamsity,again,Thank you!)告诉了我一些基本的步骤和注意事项,我按自己的实践整理成了本文,希望对后来者有所帮助。

调试动机:

没有人愿意没事就调着文件系统玩儿,而且,要实现基于源代码级的调试,你得首先要有源代码才行。我是在自己所做的文件系统过滤驱动无法在FAT文件系统下通过测试时(BOSD),才想起要调试一下文件系统。况且WinDbg蓝屏提示显示是Fastfat.sys中某个函数出错,这更加坚定了我要调试一下文件系统的想法。

步骤一:编译你自己的Fastfat.sys

首先你要编译一个调试版的FAT,Windows的WDK中有fastfat的源代码,直接使用WDK的编译环境就可以编译一份可以调试的Fastfat.sys(使用checked build),需要注意你要使用该FAT文件系统的操作系统类型,不同的操作系统对应不同的Fastfat源代码,也对应着不同的编译环境。

步骤二:替换目标操作系统上的Fastfat.sys

按照网友dreamsity的指示,最好是系统盘是NTFS,然后再有一个从盘你格式成Fat格式的,在这里一个重要的建议是很有必要使用虚拟机来调试文件系统。我使用的是WinDbg+VirtualPC,效果很好,强力推荐,呵呵。关于怎么使用WinDbg和虚拟机来调试驱动,我的另外一个帖子有很详细的入门介绍,可以用作入门参考。接下来你要做的,就是要替换操作系统的Fastfat.sys文件,这个驱动文件在(%SystemToor%system32/drivers)目录下,替换将在OS下次启动时生效,但是因为Windows有一个文件保护的功能(WFP:Windows File Protection),你替换掉以后,下次重启Windows会把旧文件替换回来。禁用WFP的方法网上有很多(改注册表、更改组策略、更改sfc_os.dll或者sfc.dll以及使用SetSfcFileException等等),但是对于我调试的操作系统(Win2000 sp4 rollup更新汇总)似乎没有一个凑效的。最后,我尝试了一个土法子,居然成功了:就是同时替换两个地方的Fastfat.sys文件,上面说的目录和((%SystemToor%system32/dllcache)下的文件,dllcache就是Windows用来恢复受保护文件的备份文件存放处,替换掉以后,居然可以了!

步骤三:没了,直接调试就可以啦!

后面的步骤就跟调试其他类型的驱动没有什么区别了,使用WinDbg连上虚拟机,启动后,中断操作系统,在WinDbg中使用命令:(lm),你会看到Fastfat.sys已经加载,并且也已经加载了我们编译时的调试符号pdb文件。

总结:

我自己的实践心得,实际上就是dreamsity的几句话展开来讲,立此存照,也备后来者参考。

原创粉丝点击