From 45c4df406f58fb6f7d807efcc2a0a08cf359d3f6 Mon Sep 17 00:00:00 2001 From: BullyWiiPlaza Date: Fri, 26 Jan 2018 14:43:00 +0100 Subject: [PATCH] Fix advanced memory search wrong results --- src/tcpgecko/hardware_breakpoints.h | 2 +- src/tcpgecko/kernel.h | 1 - src/tcpgecko/tcp_gecko.cpp | 10 ++++++---- src/tcpgecko/utilities.h | 12 ++++++++++++ tcpgecko.elf | Bin 159220 -> 158996 bytes 5 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/tcpgecko/hardware_breakpoints.h b/src/tcpgecko/hardware_breakpoints.h index c910781..ae2a677 100644 --- a/src/tcpgecko/hardware_breakpoints.h +++ b/src/tcpgecko/hardware_breakpoints.h @@ -184,7 +184,7 @@ void setDataBreakpoint(int address, bool read, bool write) { // log_print("Setting DABR...\n"); OSSetDABR(1, address, read, write); // log_print("DABR set\n"); - int enabled = OSIsInterruptEnabled(); + // int enabled = OSIsInterruptEnabled(); // log_printf("Interrupts enabled: %i\n", enabled); } diff --git a/src/tcpgecko/kernel.h b/src/tcpgecko/kernel.h index bc11df6..080d3d4 100644 --- a/src/tcpgecko/kernel.h +++ b/src/tcpgecko/kernel.h @@ -99,7 +99,6 @@ int kernelMemoryCompare(const char *sourceBuffer, } bool loopEntered = false; - while (kern_read(sourceBuffer) == kern_read(destinationBuffer)) { loopEntered = true; sourceBuffer = (char *) sourceBuffer + KERNEL_MEMORY_COMPARE_STEP_SIZE; diff --git a/src/tcpgecko/tcp_gecko.cpp b/src/tcpgecko/tcp_gecko.cpp index 9deaa88..94e7bce 100644 --- a/src/tcpgecko/tcp_gecko.cpp +++ b/src/tcpgecko/tcp_gecko.cpp @@ -1252,12 +1252,14 @@ static int processCommands(struct pygecko_bss_t *bss, int clientfd) { int comparisonResult; if (kernelRead) { - comparisonResult = kernelMemoryCompare((char *) currentAddress, searchBytes, searchBytesCount); + comparisonResult = kernelMemoryCompare((char *) currentAddress, + searchBytes, searchBytesCount); } else { - comparisonResult = memcmp((void *) currentAddress, searchBytes, searchBytesCount); + comparisonResult = memoryCompare((void *) currentAddress, + searchBytes, (size_t) searchBytesCount); } if (comparisonResult == 0) { - // Search bytes have been found + // Search bytes have been found, add the addresses to the return buffer ((int *) buffer)[1 + searchBytesOccurrences] = currentAddress; searchBytesOccurrences++; @@ -1579,4 +1581,4 @@ void startTCPGecko() { OSResumeThread(thread); log_print("TCP Gecko started...\n"); -} +} \ No newline at end of file diff --git a/src/tcpgecko/utilities.h b/src/tcpgecko/utilities.h index 912f010..6984d42 100644 --- a/src/tcpgecko/utilities.h +++ b/src/tcpgecko/utilities.h @@ -4,6 +4,7 @@ #include "../dynamic_libs/os_functions.h" #include "../utils/logger.h" #include "kernel.h" +#include /* size_t */ void writeCode(u32 address, u32 instruction) { u32 *pointer = (u32 *) (address + 0xA0000000); @@ -20,4 +21,15 @@ void patchFunction(char *function, char *patchBytes, unsigned int patchBytesSize log_print("Successfully patched!\n"); } +int memoryCompare(const void *s1, const void *s2, size_t n) { + const unsigned char *p1 = static_cast(s1); + const unsigned char *p2 = static_cast(s2); + while (n--) + if (*p1 != *p2) + return *p1 - *p2; + else + p1++, p2++; + return 0; +} + #endif \ No newline at end of file diff --git a/tcpgecko.elf b/tcpgecko.elf index 0e6eb672acfaa22644c50080683baae5ee735fb9..a2adbc92f4a855d0a1d75a3bf8e1c3ec359cef85 100644 GIT binary patch delta 33014 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