From f1060ff86c2b83e6e255db4989fa8e9d70920c58 Mon Sep 17 00:00:00 2001 From: Giulio De Pasquale Date: Sun, 14 May 2017 23:01:11 +0200 Subject: [PATCH] NULL pointers everywhere --- cpp/emulator.cpp | 3 ++- cpp/vm.cpp | 2 +- cpp/vmas.cpp | 13 +++++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/cpp/emulator.cpp b/cpp/emulator.cpp index e0535f0..1d1ebcf 100644 --- a/cpp/emulator.cpp +++ b/cpp/emulator.cpp @@ -8,7 +8,8 @@ using namespace std; int main() { - VM vm((uint8_t*)"\x00\x00\x50\x50\x03\x10\x00\x00\x02\x04\x10\x00\x04\x04\x01\x00\x13", 107); + uint8_t bytecode[] = "\x00\x00\x00"; + VM vm(bytecode, sizeof(bytecode)); vm.run(); printf("\n\n"); vm.status(); diff --git a/cpp/vm.cpp b/cpp/vm.cpp index 1f7c04e..1964901 100644 --- a/cpp/vm.cpp +++ b/cpp/vm.cpp @@ -177,7 +177,7 @@ void VM::run(void) { break; default: DBG_INFO(("WAT: 0x%x\n", opcode)); - return; + finished = true; break; } } diff --git a/cpp/vmas.cpp b/cpp/vmas.cpp index c547f2b..1dd6cdb 100644 --- a/cpp/vmas.cpp +++ b/cpp/vmas.cpp @@ -5,6 +5,9 @@ #include VMAddrSpace::VMAddrSpace() { + stack = NULL; + code = NULL; + data = NULL; stacksize = DEFAULT_STACKSIZE; codesize = DEFAULT_CODESIZE; datasize = DEFAULT_DATASIZE; @@ -12,6 +15,9 @@ VMAddrSpace::VMAddrSpace() { } VMAddrSpace::VMAddrSpace(uint32_t ss, uint32_t cs, uint32_t ds) { + stack = NULL; + code = NULL; + data = NULL; stacksize = ss; codesize = cs; datasize = ds; @@ -21,12 +27,15 @@ VMAddrSpace::VMAddrSpace(uint32_t ss, uint32_t cs, uint32_t ds) { bool VMAddrSpace::allocate(void) { DBG_INFO(("Allocating sections...\n")); if (code == NULL) { + DBG_INFO(("\tcode...\n")); code = (uint8_t *)malloc(codesize); } if (data == NULL) { + DBG_INFO(("\tdata...\n")); data = (uint8_t *)malloc(datasize); } if (stack == NULL) { + DBG_INFO(("\tstack...\n")); stack = (uint8_t *)malloc(stacksize); } if (code == NULL) { @@ -43,6 +52,10 @@ bool VMAddrSpace::allocate(void) { DBG_ERROR(("Couldn't allocate stack section.\n")); return false; } + memset(code, 0xff, + stacksize); // auto halt in case the assembly is not correct + memset(stack, 0x0, stacksize); + memset(data, 0x0, stacksize); DBG_SUCC(("Done!\n")); return true; }