From edc949143c3e0a93c3868f0bbcc884fe721f4e92 Mon Sep 17 00:00:00 2001 From: systemcoder Date: Fri, 13 Mar 2020 22:58:43 +0000 Subject: Added code for arguments settings, all function names defined --- H64E-2/h64e-model.h | 38 ++++++++ H64E-2/h64e.c | 30 +++++++ H64E-2/h64e.h | 27 +++++- H64E-2/main.c | 247 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 341 insertions(+), 1 deletion(-) create mode 100644 H64E-2/h64e-model.h create mode 100644 H64E-2/main.c (limited to 'H64E-2') diff --git a/H64E-2/h64e-model.h b/H64E-2/h64e-model.h new file mode 100644 index 0000000..41c4a4a --- /dev/null +++ b/H64E-2/h64e-model.h @@ -0,0 +1,38 @@ +// +// h64e-model.h +// H64E-2 +// +// Created by dianshi on 3/13/20. +// Copyright © 2020 dianshi. All rights reserved. +// + +#ifndef h64e_model_h +#define h64e_model_h + +#include + +typedef int (*trnf_clb)(char*); + +typedef struct H64E_stream_in { + int cur_size; + int size; + uint8_t *buf; +} H64E_stream_in; + +//used to get collected data +int H64E_si_init(H64E_stream_in *in, ssize_t size); +int H64E_si_data_in(H64E_stream_in *in, uint8_t *data, size_t size); +int H64E_si_data_out(H64E_stream_in *in, const uint8_t *data, size_t size); + +typedef struct H64E_stream_out { + int cur_size; + int size; + uint8_t *buf; +} H64E_stream_out; + +//using to collect output formated data +int H64E_so_init(H64E_stream_out *out, ssize_t size); +int H64E_so_data_in(H64E_stream_in *out, uint8_t *data, size_t size); +int H64E_so_data_out(H64E_stream_in *out, const uint8_t *data, size_t size); + +#endif /* h64e_model_h */ diff --git a/H64E-2/h64e.c b/H64E-2/h64e.c index a6ec1ef..ddcfc5c 100644 --- a/H64E-2/h64e.c +++ b/H64E-2/h64e.c @@ -7,3 +7,33 @@ // #include "h64e.h" + +int h64e_init(H64E_t *s) +{ + return 0; +} + +int h64e_check_param( H64E_t *fmt ) +{ + return 0; +} + +int h64e_set_input(H64E_t *s) +{ + return 0; +} + +int h64e_set_output(H64E_t *s) +{ + return 0; +} + +int h64e_convert(H64E_t *s) +{ + return 0; +} + +int h64e_destroy(H64E_t *s) +{ + return 0; +} diff --git a/H64E-2/h64e.h b/H64E-2/h64e.h index bd5f13f..f96edbd 100644 --- a/H64E-2/h64e.h +++ b/H64E-2/h64e.h @@ -15,6 +15,27 @@ Set data structure from arguments and use to handle data */ + +#define H64E_G_NONE 0 +#define H64E_G_BYTE 1 +#define H64E_G_WORD 2 +#define H64E_G_DWORD 3 +#define H64E_G_QWORD 4 + + +#define H64E_O_START 0 +#define H64E_O_NONE 0 +#define H64E_O_STRING 1 +#define H64E_O_INT8 2 +#define H64E_O_UINT8 3 +#define H64E_O_INT16 4 +#define H64E_O_UINT16 5 +#define H64E_O_INT32 6 +#define H64E_O_UINT32 7 +#define H64E_O_INT64 8 +#define H64E_O_UINT64 9 +#define H64E_O_END H64E_O_UINT64 + typedef struct H64E_format { @@ -29,14 +50,18 @@ typedef struct H64E_format typedef struct H64E_t { - H64E_format format; + H64E_format fmt; H64E_stream_in sin; H64E_stream_out sout; + int fd_in; + int fd_out; } H64E_t; int h64e_init(H64E_t *s); +int h64e_check_param( H64E_t *s ); int h64e_set_input(H64E_t *s); int h64e_set_output(H64E_t *s); +int h64e_convert(H64E_t *s); int h64e_destroy(H64E_t *s); 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 +#include +#include +#include +#include +#include +#include +#include "h64e.h" + +#include +#include +#include + +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] \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; +} -- cgit v1.2.3