Habe bis vor 2 Wochen noch keine Zeile Java programmiert.
Was mach ich mit den pointern, was mach ich mit den compileranweisungen?
/* * Copyright (C) 2003, by Keith J. Jones. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the project nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include <sys/types.h> #include <sys/uio.h> #include <unistd.h> #include <fcntl.h> #include <stdio.h> #include <time.h> #include <math.h> // /* This is the default block size for an activity record */ // #define BLOCK_SIZE 0x80 #ifdef CYGWIN ssize_t pread( int d, void *buf, size_t nbytes, off_t offset) { lseek( d, offset, SEEK_SET ); read( d, buf, nbytes ); } #endif // /* Backwards ASCII Hex to Integer */ // unsigned int bah_to_i( char *val, int size ) { int total; int i; total = 0; for ( i=0; i < size; i++ ) { total += ((unsigned char)val[i] << 8*i); } return total; } // /* Backwards 8 byte ASCII Hex to time_t */ // time_t win_time_to_unix( char *val ) { unsigned long low, high; double dbl; time_t total; char fourbytes[4]; fourbytes[0] = val[0]; fourbytes[1] = val[1]; fourbytes[2] = val[2]; fourbytes[3] = val[3]; low = bah_to_i( fourbytes, 4 ); fourbytes[0] = val[4]; fourbytes[1] = val[5]; fourbytes[2] = val[6]; fourbytes[3] = val[7]; high = bah_to_i( fourbytes, 4 ); dbl = ((double)high)*(pow(2,32)); dbl += (double)(low); if ( dbl==0 ) { return 0; } dbl *= 1.0e-7; dbl -= 11644473600; total = (double)dbl; return total; } // /* This function prepares a string for nice output */ // int printablestring( char *str ) { int i; i = 0; while ( str[i] != '\0' ) { if ( (unsigned char)str[i] < 32 || (unsigned char)str[i] > 127 ) { str[i] = ' '; } i++; } return 0; } // /* This function parses a REDR record. */ // int parse_redr( int history_file, int currrecoff, char *delim, int filesize, char *type ) { char fourbytes[4]; char hashrecflagsstr[4]; char chr; int filenameoff; int httpheadersoff; int i; int reclen; int dirnameoff; time_t modtime; time_t accesstime; char *url; char *filename; char *httpheaders; char ascmodtime[26], ascaccesstime[26]; char dirname[9]; pread( history_file, fourbytes, 4, currrecoff+4 ); reclen = bah_to_i( fourbytes, 4 )*BLOCK_SIZE; url = (char *)malloc( reclen+1 ); i = 0; pread( history_file, &chr, 1, currrecoff+0x10 ); while ( chr != '\0' && currrecoff+0x10+i+1 < filesize ) { url[i] = chr; pread( history_file, &chr, 1, currrecoff+0x10+i+1 ); i++; } url[i] = '\0'; filename = (char *)malloc( 1 ); filename[0] = '\0'; httpheaders = (char *)malloc( 1 ); httpheaders[0] = '\0'; dirname[0] = '\0'; ascmodtime[0] = '\0'; ascaccesstime[0] = '\0'; dirname[0] = '\0'; printablestring( type ); printablestring( url ); printablestring( ascmodtime ); printablestring( ascaccesstime ); printablestring( filename ); printablestring( dirname ); printablestring( httpheaders ); printf( "%s%s%s%s%s%s%s%s%s%s%s%s%s\n", type, delim, url, delim, ascmodtime, delim, ascaccesstime, delim, filename, delim, dirname, delim, httpheaders ); type[0] = '\0'; free( url ); free( filename ); free( httpheaders ); } // /* This function parses a URL and LEAK activity record. */ // int parse_url( int history_file, int currrecoff, char *delim, int filesize, char *type ) { char fourbytes[4]; char hashrecflagsstr[4]; char eightbytes[8]; char chr; int filenameoff; int httpheadersoff; int urloff; int i; int reclen; int dirnameoff; time_t modtime; time_t accesstime; char ascmodtime[26], ascaccesstime[26]; char dirname[9]; char *url; char *filename; char *httpheaders; pread( history_file, fourbytes, 4, currrecoff+4 ); reclen = bah_to_i( fourbytes, 4 )*BLOCK_SIZE; pread( history_file, eightbytes, 8, currrecoff+8 ); modtime = win_time_to_unix( eightbytes ); pread( history_file, eightbytes, 8, currrecoff+16 ); accesstime = win_time_to_unix( eightbytes ); ctime_r( &accesstime, ascaccesstime ); ctime_r( &modtime, ascmodtime ); if (accesstime == 0) { ascaccesstime[0] = '\0'; } if (modtime == 0) { ascmodtime[0] = '\0'; } url = (char *)malloc( reclen+1 ); pread( history_file, &chr, 1, currrecoff+0x34 ); urloff = (unsigned char)chr; i = 0; pread( history_file, &chr, 1, currrecoff+urloff ); while ( chr != '\0' && currrecoff+urloff+i+1 < filesize ) { url[i] = chr; pread( history_file, &chr, 1, currrecoff+urloff+i+1 ); i++; } url[i] = '\0'; filename = (char *)malloc( reclen+1 ); pread( history_file, fourbytes, 4, currrecoff+0x3C ); filenameoff = bah_to_i( fourbytes, 4 ) + currrecoff; i = 0; pread( history_file, &chr, 1, filenameoff ); while ( chr != '\0' && filenameoff+i+1 < filesize ) { filename[i] = chr; pread( history_file, &chr, 1, filenameoff+i+1 ); i++; } filename[i] = '\0'; pread( history_file, &chr, 1, currrecoff+0x39 ); dirnameoff = (unsigned char)chr; if (0x50+(12*dirnameoff)+8 < filesize) { pread( history_file, dirname, 8, 0x50+(12*dirnameoff) ); dirname[8] = '\0'; } else { dirname[0] = '\0'; } httpheaders = (char *)malloc( reclen+1 ); pread( history_file, fourbytes, 4, currrecoff+0x44 ); httpheadersoff = bah_to_i( fourbytes, 4 ) + currrecoff; i = 0; pread( history_file, &chr, 1, httpheadersoff ); while ( chr != '\0' && httpheadersoff+i+1 < currrecoff+reclen && httpheadersoff+i+1 < filesize ) { httpheaders[i] = chr; pread( history_file, &chr, 1, httpheadersoff+i+1 ); i++; } httpheaders[i] = '\0'; printablestring( type ); printablestring( url ); printablestring( ascmodtime ); printablestring( ascaccesstime ); printablestring( filename ); printablestring( dirname ); printablestring( httpheaders ); if (type[3] == ' ') { type[3] = '\0'; } printf( "%s%s%s%s%s%s%s%s%s%s%s%s%s\n", type, delim, url, delim, ascmodtime, delim, ascaccesstime, delim, filename, delim, dirname, delim, httpheaders ); type[0] = '\0'; dirname[0] = '\0'; ascmodtime[0] = '\0'; ascaccesstime[0] = '\0'; free( url ); free( filename ); free( httpheaders ); } int parse_unknown( int history_file, int currrecoff, char *delim, int filesize, char *type ) { type[0] = '\0'; } // /* This function prints the usage message */ // void usage( void ) { printf("\nUsage: pasco [options] <filename>\n" ); printf("\t-d Undelete Activity Records\n" ); printf("\t-t Field Delimiter (TAB by default)\n" ); printf("\n\n"); } // /* MAIN function */ // int main( int argc, char **argv ) { int history_file; char fourbytes[4]; char chr; char delim[10]; int currrecoff; int filesize; int i; int opt; time_t modtime; time_t accesstime; char type[5]; char hashrecflagsstr[4]; int hashoff; int hashsize; int nexthashoff; int offset; int hashrecflags; int deleted = 0; if (argc < 2) { usage(); exit( -2 ); } strcpy( delim, "\t" ); printf("History File: %s\n\n", argv[argc-1]); history_file = open( argv[argc-1], O_RDONLY, 0 ); if ( history_file <= 0 ) { printf("ERROR - The index.dat file cannot be opened!\n\n"); usage(); exit( -3 ); } pread( history_file, fourbytes, 4, 0x1C ); filesize = bah_to_i( fourbytes, 4 ); while ((opt = getopt( argc, argv, "dt:f:")) != -1) { switch(opt) { case 't': strncpy( delim, optarg, 10 ); break; case 'd': deleted = 1; break; default: usage(); exit(-1); } } printf( "TYPE%sURL%sMODIFIED TIME%sACCESS TIME%sFILENAME%sDIRECTORY%sHTTP HEADERS\n", delim, delim, delim, delim, delim, delim ); if (deleted == 0) { pread( history_file, fourbytes, 4, 0x20 ); hashoff = bah_to_i( fourbytes, 4 ); while (hashoff != 0 ) { pread( history_file, fourbytes, 4, hashoff+8 ); nexthashoff = bah_to_i( fourbytes, 4 ); pread( history_file, fourbytes, 4, hashoff+4 ); hashsize = bah_to_i( fourbytes, 4 )*BLOCK_SIZE; for (offset = hashoff + 16; offset < hashoff+hashsize; offset = offset+8) { pread( history_file, hashrecflagsstr, 4, offset ); hashrecflags = bah_to_i( hashrecflagsstr, 4 ); pread( history_file, fourbytes, 4, offset+4 ); currrecoff = bah_to_i( fourbytes, 4 ); if (hashrecflagsstr[0] != 0x03 && currrecoff != 0xBADF00D ) { if (currrecoff != 0) { pread( history_file, fourbytes, 4, currrecoff ); for (i=0;i < 4;i++) { type[i] = fourbytes[i]; } type[4] = '\0'; if (type[0] == 'R' && type[1] == 'E' && type[2] == 'D' && type[3] == 'R' ) { parse_redr( history_file, currrecoff, delim, filesize, type ); } else if ( (type[0] == 'U' && type[1] == 'R' && type[2] == 'L') || (type[0] == 'L' && type[1] == 'E' && type[2] == 'A' && type[3] == 'K') ) { parse_url( history_file, currrecoff, delim, filesize, type ); } else { parse_unknown( history_file, currrecoff, delim, filesize, type ); } } } } hashoff = nexthashoff; } } else if (deleted == 1) { currrecoff = 0; while (currrecoff < filesize ) { pread( history_file, fourbytes, 4, currrecoff ); for (i=0;i < 4;i++) { type[i] = fourbytes[i]; } type[4] = '\0'; if (type[0] == 'R' && type[1] == 'E' && type[2] == 'D' && type[3] == 'R' ) { parse_redr( history_file, currrecoff, delim, filesize, type ); } else if ( (type[0] == 'U' && type[1] == 'R' && type[2] == 'L') || (type[0] == 'L' && type[1] == 'E' && type[2] == 'A' && type[3] == 'K') ) { parse_url( history_file, currrecoff, delim, filesize, type ); } else { parse_unknown( history_file, currrecoff, delim, filesize, type ); } currrecoff = currrecoff + BLOCK_SIZE; } } close (history_file); }