两个月前完成的一个工具,用于恢复误格式化后硬盘的照片。程序主要涉及分区表读取,关于分区表的格式以及逻辑结构可以从程序中得到。代码比较混乱,风格也不好,注释又不多。
英文字符界面。
《JPEG Recover(照片恢复器)自述文件》
经过一段时间的摸索,终于把这个东西完成了,虽然有不少的瑕疵,代码也非常混乱,
但这算是我的第一个独立坚持完成的作品。它是一个不支持中文,并且操作复杂,对使用
者有较高要求的怪胎,下面简单介绍一下这个怪胎。
一:命令参数
JPEGRCV不提供内置帮助信息,所以不支持“/?”、“/h”等参数。仅有一组硬盘选择
参数,从 hd0-hd9,对应 0x80-0x89 共计10个物理硬盘驱动器号。直接在命令行下输入
JPEGRCV 或带入非 hd0-hd9的参数,这个怪胎不会作出任何错误判断,它会将 hd0 作为默
认参数来使用。
二:运行参数
JPEGRCV运行后会列出用户所选择硬盘的分区信息,并提示用户输入一系列参数,其中
包括你所要扫描的起始扇区号、需要扫描的总扇区数。你可以根据它所列出的分区信息来确
定你所要输入的参数(如下表)。
================================================================================
JPEG Recover 0.1.60.2008
(C)Copyright 2007-2008 by JIANGYONG
Hard disk number : 0x80
NO. State Start Max System Size
0: A 3f fa08bd FAT32 8001MB
1: N fa093b 105cced FAT32 8377MB
Please input start sector(HEX): 3f
Start sector is : 3f
Are you sure ? (Y/N) y
Please input sector count(HEX): fa08db
Sector count is : fa08db
Are you sure ? (Y/N) y
Now scaning ! Are you sure ? (Y/N)
================================================================================
数据及含义:
NO. 编号
State 状态(是否活动)
Start 起始扇区号
Max 扇区数
System 文件系统类型
Size 容量
三:扫描和恢复
当所有数据输入完毕并确认后,程序开始扫描硬盘,并将获得的信息存放到JPEGRCV.LOG
和JPEGERR.LOG中,扫描任务完成后程序会将找到的图片恢复到当前路径的JPEGFIND和JPEGERR
子目录中。因为有可能会遇到一些已经损坏的没有正确结束标记的文件,为节约时间,我将所
有文件的大小限制在10MB以下,若你的照片超过这个大小有可能无法正确恢复,所有这些不能
正确恢复的照片,都被存放到 JPEGERR 中。
另:在扫描磁盘的过程中按 ESC 键,程序会终止,这是我为
了方便调试而设置的,后来就一直没有取消。
JPEG Recover 0.1.24.2008
(C)Copyright 2007-2008 by JIANGYONG
Current : 1091f
Completed : 100.00%
Time used : 00:00:04
Find files: 32
Some Error: 0
FileSector: 10
============ Saveing files ============
NO.32 : JPEGFIND\00007D37.JPG 118 KB
NO.31 : JPEGFIND\00007E2F.JPG 56 KB
NO.30 : JPEGFIND\00007EA7.JPG 49 KB
NO.29 : JPEGFIND\00007F1F.JPG 1384
四:关于代码、注释和运行环境
代码很混乱,也基本上没有注释。因为我确实不擅长使用C或者C++,并且没有一个很好用的
编辑器,那些代码中并没有什么优秀算法或结构----这是我不擅长使用C的原因。并且,我对
C/C++的一些基本概念也含混不清,包括很多ANSI C 所提供的标准函数也不了解,当我要用到它
们的时候就立即到网上去找,对于那些混乱的代码,就请高手们不要笑话了。
C 编译环境: TC++3.0
ASM编译环境: nasm 0.98
运行环境: 实模式 DOS、至少一个 FAT 分区
并且该分区的剩余空间足够存放需要找回的数据。
硬件环境: 80386及以上CPU,1MB以上内存
压缩包内目录结构
│ MK.BAT 编译命令
│ error.h 错误处理
│ JPEGRCV.C 主程序文件
│ extint13.asm 扩展INT13H读盘功能代码
│ NASM.EXE nasm 编译器,用于编译 extint13.asm
│ readme.txt 《JPEG Recover(照片恢复器)自述文件》
│
├─INC
│ SUPERX86.INC X86指令增强宏
│
├─include
│ define.h 数据类型定义
│ hdd.h 硬盘结构相关的定义
│ key.h 键盘定义
│
├─ERROR 编译器错误输出
└─JPEGRCV 目标文件输出
JPEGRCV.EXE 目标文件(成品)
五:收获
在投入这个作品之前,我一直以为 FAT系列分区表中,每一个表的线性地址项就是当前分区
起始扇区的绝对扇区号,其实并不是这样,实际上它只是当前逻辑分区所在扩展分区的逻辑扇区
号,就因为这一点,在写分区表读取部分的代码时,让我困惑了很长一段时间。
六:完成这个怪胎的原因
这个软件目前并没有多少实际用途,因为比它更优秀的同类软件多如牛毛。我之所以完成它,
其一:是受朋友所托,帮忙找回一些照片,因为当时我并没有找到能够按磁盘扇区扫描并恢
复照片的工具。
其二:是因为我确实想要详细的了解一下分区表的真正结构,以往只是从资料上得到的一些
概念上的印象而已。
现在这两个目的我都达到了,所以,就我个人来说,这是一个成功的作品。
2008年3月18日
作 者: 飞翔
QQ : 6830373
E-Mail:
sevekwl@qq.com
下载:JPEG Recover 源代码
谢谢源码,学习ing...