diff options
Diffstat (limited to 'H64E-2/main.c')
-rw-r--r-- | H64E-2/main.c | 247 |
1 files changed, 247 insertions, 0 deletions
diff --git a/H64E-2/main.c b/H64E-2/main.c new file mode 100644 index 0000000..8830f1d --- /dev/null +++ b/H64E-2/main.c @@ -0,0 +1,247 @@ +// +// main.c +// H64E-2 +// +// Created by dianshi on 3/13/20. +// Copyright © 2020 dianshi. All rights reserved. +// + +#include <stdio.h> +#include <stdlib.h> +#include <stdint.h> +#include <getopt.h> +#include <unistd.h> +#include <ctype.h> +#include <string.h> +#include "h64e.h" + +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> + +int file_open( const char *fname ) +{ + int fd; + + fd = open( fname, O_RDONLY ); + if ( fd == -1 ) + { + printf("Couldn open file %s\n", fname); + return -1; + } + + return fd; +} + +int file_read( int fd, char *buf, int size ) +{ + int ret; + + if ( size < 1 ) + return -1; + + ret = (int)read( fd, buf, size ); + + return ret; +} + +int file_seek( int fd, off_t pos ) +{ + off_t rc; + + if (fd<1) + { + return -1; + } + + rc = lseek( fd, pos, SEEK_SET ); + if (rc == -1) + return -1; + return 0; + +} + +int file_close( int fd ) +{ + + close( fd ); + + return 0; +} + +int group_name2int( char *name ) +{ + if ( 0 == strncmp( name, "byte", 4 ) ) + { + return H64E_G_BYTE; + } + if ( 0 == strncmp( name, "word", 4 ) ) + { + return H64E_G_WORD; + } + if ( 0 == strncmp( name, "dword", 5 ) ) + { + return H64E_G_DWORD; + } + if ( 0 == strncmp( name, "qword", 5 ) ) + { + return H64E_G_QWORD; + } + + return 1; +} + +int output_name2int( char *name ) +{ + if ( 0 == strncmp( name, "str", 3) ) + { + return H64E_O_STRING; + } + if ( 0 == strncmp( name, "i8", 2) ) + { + return H64E_O_INT8; + } + if ( 0 == strncmp( name, "u8", 2) ) + { + return H64E_O_UINT8; + } + if ( 0 == strncmp( name, "i16", 3) ) + { + return H64E_O_INT16; + } + if ( 0 == strncmp( name, "u16", 3) ) + { + return H64E_O_UINT16; + } + if ( 0 == strncmp( name, "i32", 3) ) + { + return H64E_O_INT32; + } + if ( 0 == strncmp( name, "u32", 3) ) + { + return H64E_O_UINT32; + } + if ( 0 == strncmp( name, "i64", 3) ) + { + return H64E_O_INT64; + } + if ( 0 == strncmp( name, "u64", 3) ) + { + return H64E_O_UINT64; + } + return 0; +} + +void helper( char *progname ) +{ + printf("Usage: %s [OPTS] <filename>\n\n" + " -a - asciimode\n" + " -b - show offset adress\n" + " -o - file offset\n" + " -i - output hex\n" + " -l - length of output\n" + " -c - column size in byts\n" + " -g - datatype output: byte,word,dword\n" + " -e - interp data: u8,i8,u16,i16,u32,i32,u64,i64" + "\nVersion: 0.1 \n" + "\n" + , progname); +} + +void version() +{ + printf("???\n"); +} + + +int main(int argc, const char * argv[]) { + // insert code here... + int c; + int param_length = -1; + int param_offset = -1; + char *fname = NULL; + int fd; + + printf("H64E-2 Project started 1\n"); + + //initialise structure + H64E_t h64e; + h64e_init(&h64e); + + + //set all params from arguments + /*get cmd args and set options */ + while ( (c = getopt(argc, argv, "abo:il:vc:g:e:")) != -1 ) + { + switch(c) + { + case 'a': + h64e.fmt.group = H64E_G_BYTE; + h64e.fmt.flag_output = 1; + h64e.fmt.output_type = H64E_O_STRING; + break; + case 'b': + h64e.fmt.flag_offset = 1; + break; + case 'o': + param_offset = atoi( optarg ); + break; + case 'i': + h64e.fmt.group = H64E_G_BYTE; + h64e.fmt.flag_output = 0; + h64e.fmt.flag_offset = 1; + break; + case 'l': + param_length = atoi( optarg ); + break; + case 'c': + h64e.fmt.column_size = atoi(optarg); + break; + case 'g': + h64e.fmt.group = group_name2int(optarg); + break; + case 'e': + h64e.fmt.flag_output = 1; + h64e.fmt.output_type = output_name2int(optarg); + break; + case 'v': + version(); + exit(1); + break; + default: + helper( argv[0] ); + exit(1); + } + } + + if ( argc < 2 ) + { + printf("At least one argument needed now\n"); + helper( argv[0] ); + return 1; + } + + /* last argument is file name */ + fname = argv[argc-1]; + + /* check params */ + h64e_check_param( &h64e ); + + /* open file */ + fd = file_open( fname ); + if ( fd == -1 ) + { + printf("Cannot open file %s\n", fname); + return -1; + } + + //register formats + + //do conversation, reading input and outputing + + //deinit all structures + h64e_destroy(&h64e); + + printf("Ending Execution\n"); + return 0; +} |