Board logo

标题: [原创] JPEG Recover 源代码 C&ASM [打印本页]

作者: sevekwl     时间: 2008-4-25 22:24    标题: [原创] JPEG Recover 源代码 C&ASM

两个月前完成的一个工具,用于恢复误格式化后硬盘的照片。程序主要涉及分区表读取,关于分区表的格式以及逻辑结构可以从程序中得到。代码比较混乱,风格也不好,注释又不多。

英文字符界面。



《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 源代码
作者: Farmer     时间: 2008-4-26 16:15
支持原创,和分享代码,谢谢
作者: zyl910     时间: 2008-4-28 12:32
谢谢源码,学习ing...




欢迎光临 中国DOS联盟论坛 (http://cndos.fam.cx/forum/) Powered by Discuz! 2.5