中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [原创] JPEG Recover 源代码 C&ASM 上一主题 | 下一主题
sevekwl
新手上路





积分 18
发帖 6
注册 2007-12-13
状态 离线
『楼 主』:  [原创] 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 源代码

2008-4-25 22:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Farmer
初级用户





积分 48
发帖 19
注册 2008-3-31
状态 离线
『第 2 楼』:  

支持原创,和分享代码,谢谢

2008-4-26 16:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zyl910
中级用户





积分 282
发帖 126
注册 2006-5-17
状态 离线
『第 3 楼』:  

谢谢源码,学习ing...



人类存在的目的就是试图理解人类为何存在
2008-4-28 12:32
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: