www.pudn.com > 文件恢复及修补 C 语言源程序.zip > DUMP.C


 
/*              dump.c          core style dump of a file       */ 
 
/*              usage: A>DUMP B:BLIP.O                                  */ 
 
 
char buffer[4096]; 
 
main(argc,argv) 
        int  argc; 
        char *argv[]; { 
        unsigned i,numin,tot,file; 
        char *cfrom; 
 
        if (argc < 2) { 
                puts("Missing Filename\n"); 
                } 
 
        tot=0; 
        if ((file=open(argv[1],0)) == -1) { 
                puts("Cannot Open "); 
                puts(argv[1]); 
                exit(1); 
                } 
 
/*      read and dump 4k at a time      */ 
 
        do { 
                numin=read(file,buffer,4096); 
                if (numin == -1) { 
                        puts("Cannot Read "); 
                        puts(argv[1]); 
                        exit(1); 
                        } 
                cfrom=0; 
                while (cfrom < numin) { 
 
/*      print the offset in hex */ 
 
                        ohw(cfrom+tot); 
                        putchar(' '); 
 
/*      print 16 bytes in hex   */ 
 
                        for (i=0; i < 16; i++) { 
                                putchar(' '); 
                                ohb(buffer[cfrom++]); 
                                } 
                        cfrom-=16; 
                        puts("  *"); 
 
/*      print the bytes in ascii        */ 
 
                        for (i=0; i < 16; i++) { 
                                putchar((buffer[cfrom] >= ' ' && buffer[cfrom] < 0x7f) 
                                         ? buffer[cfrom]: '.'); 
                                cfrom++; 
                                } 
                        puts("*\n"); 
                        } 
                tot+=numin; 
                } 
        while (numin == 4096); 
        } 
 
/*      print a word in hex     */ 
 
ohw(wrd) 
        unsigned wrd; { 
        ohb(wrd>>8); 
        ohb(wrd); 
        } 
 
/*      print a byte in hex     */ 
 
ohb(byt) 
        char byt; { 
        onib(byt>>4); 
        onib(byt); 
        } 
 
/*      print a nibble as a hex character       */ 
 
onib(nib) 
        char nib; { 
 
        nib&=15; 
        putchar((nib >= 10) ? nib-10+'A': nib+'0'); 
        }