From 70255ed9efb6bb6566834232ab1f253db7799f66 Mon Sep 17 00:00:00 2001 From: Turingon Date: Wed, 28 Aug 2024 18:02:40 +0200 Subject: [PATCH] Getting closer --- disassembler | Bin 0 -> 16824 bytes disassembler.c | 19 ++++++++++++------- 2 files changed, 12 insertions(+), 7 deletions(-) create mode 100755 disassembler diff --git a/disassembler b/disassembler new file mode 100755 index 0000000000000000000000000000000000000000..d8c16178292c1ea2b4d24586368bd8ae57ab1d54 GIT binary patch literal 16824 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 V(&_3`k)mI;DGgf6>McH2{5L?6zE}VN literal 0 HcmV?d00001 diff --git a/disassembler.c b/disassembler.c index 30f3cd3..d02703e 100644 --- a/disassembler.c +++ b/disassembler.c @@ -6,6 +6,9 @@ // How to compile? Like this! // gcc -o disassembler disassembler.c -lcjson +// How to run? Like this! +// ./disassembler snake.gb + // Large chunks of the code are from my Intel 8080 emulator typedef struct buffer { @@ -35,11 +38,10 @@ buffer* read_file(char** argv) { cJSON* read_cjson() { FILE *fs = fopen("Opcodes.json", "rb"); - if (fs = NULL) { + if (fs == NULL) { printf("ERROR: Unable to open the Opcodes.json file.\n"); return NULL; } - // read the file contents into a string fseek(fs, 0L, SEEK_END); int fsize = ftell(fs); @@ -62,11 +64,14 @@ cJSON* read_cjson() { cJSON_Delete(json); return NULL; } + free(b->buffer); // almost forgot that dataleak free(b); return json; } void print_buffer(buffer* b) { + // just a check + // equivalent to $ xxd snake.gb for (int i = 0; i < 40; i++) { printf("%02x \n", b->buffer[i]); } @@ -87,7 +92,7 @@ int disassemble8080(buffer* b, int pc, cJSON* json) { } cJSON *command = cJSON_GetObjectItem(unprefixed, code); if (command == NULL) { - printf("Error: Command with opcode %s not found.\n", opcode); + printf("Error: Command with opcode %s not found.\n", code); return 0; } cJSON *mnemonic_item = cJSON_GetObjectItem(command, "mnemonic"); @@ -99,11 +104,11 @@ int disassemble8080(buffer* b, int pc, cJSON* json) { } if (bytes_item != NULL && cJSON_IsNumber(bytes_item)) { - *bytes = bytes_item->valueint; + opbytes = bytes_item->valueint; } // Here ends the cJSON part - printf("%d\n", opbytes); - printf("%s\n", mnemonic); + printf("Number of Opbytes: %d ", opbytes); + printf("Mnemnoic: %s", mnemonic); if (opbytes > 5 || opbytes < 1) { opbytes = 1; @@ -123,7 +128,7 @@ int main (int argc, char** argv) { return 1; } print_buffer(buff); - JSON *json = read_cjson(); + cJSON *json = read_cjson(); if (json == NULL) { printf("main terminated\n");