From c2240bb9e7a22d2fab62be87273a98425bc52fef Mon Sep 17 00:00:00 2001 From: Michaelangel007 Date: Thu, 19 Apr 2018 10:06:34 -0700 Subject: [PATCH] Add dump symbols --- Makefile | 2 +- dump_sym.c | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 dump_sym.c diff --git a/Makefile b/Makefile index bd26aa1..55fb469 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -TARGETS = dump_list +TARGETS = dump_list dump_sym all: $(TARGETS) .PHONY: clean diff --git a/dump_sym.c b/dump_sym.c new file mode 100644 index 0000000..9dba03e --- /dev/null +++ b/dump_sym.c @@ -0,0 +1,80 @@ +// Includes + #include // printf() + #include // malloc() + +// Util + + size_t FileSize( FILE *file ) + { + if( !file ) + return 0; + + // Yes, this is insecure + // and we should use stat() + // but that isn't available under Windows + fseek( file, 0, SEEK_END ); + size_t size = ftell( file ); + fseek( file, 0, SEEK_SET ); + + return size; + } + +// Main + + int main( const int nArg, const char *aArg[] ) + { + const char *name = "gumball.fragment.2.849a"; + FILE *in = fopen( name, "rb" ); + + if( nArg > 1 ) + name = aArg[1]; + + if( in ) + { + size_t size = FileSize( in ); + +//printf( "Size: %lld\n", size ); + + if( size ) + { + char *buffer = (char*) malloc( size ); + + int src; + int len = (int) size; + + size_t read = fread( buffer, 1, size, in ); + + char name[ 9 ]; + + if( read != size ) + printf( "ERROR: Only read %lld / %lld bytes\n", read, size ); + + + for( src = 0; src < len; ) + { + int dst; + for( dst = 0; dst < 8; dst++ ) + name[ dst ] = buffer[ src + dst ]; + name[ 8 ] = 0; + + printf( + "%s EQU $%02X%02X\n" + , name + , (buffer[ src + 9 ] & 0xFF) + , (buffer[ src + 8 ] & 0xFF) + ); + + src += 10; + } + + free( buffer ); + } + + fclose( in ); + } + else + printf( "ERROR: Couldn't open: '%s'\n", name ); + + return 0; + } +