From 9ce7af45d73164622ecef778cb31d92746c14256 Mon Sep 17 00:00:00 2001 From: BullyWiiPlaza Date: Sat, 16 Dec 2017 13:57:34 +0100 Subject: [PATCH] Commit QuarkTheAwesome's data breakpoints attempt (slightly modified) --- src/system/exception_handler.cpp | 4 +- src/system/exception_handler.h | 4 + src/tcpgecko/hardware_breakpoints.S | 17 +++ ...breakpoints.hpp => hardware_breakpoints.h} | 115 ++++++++++++++++-- src/tcpgecko/tcp_gecko.cpp | 15 ++- src/utils/ppc_asm.h | 62 ++++++++++ tcpgecko.elf | Bin 159756 -> 160508 bytes 7 files changed, 200 insertions(+), 17 deletions(-) create mode 100644 src/tcpgecko/hardware_breakpoints.S rename src/tcpgecko/{hardware_breakpoints.hpp => hardware_breakpoints.h} (59%) create mode 100644 src/utils/ppc_asm.h diff --git a/src/system/exception_handler.cpp b/src/system/exception_handler.cpp index dee3ecb..701f2b0 100644 --- a/src/system/exception_handler.cpp +++ b/src/system/exception_handler.cpp @@ -125,11 +125,11 @@ static unsigned char exceptionCallback(void *c, unsigned char exception_type) { return 1; } -static unsigned char dsi_exception_cb(void *context) { +unsigned char dsi_exception_cb(void *context) { return exceptionCallback(context, 0); } -static unsigned char isi_exception_cb(void *context) { +unsigned char isi_exception_cb(void *context) { return exceptionCallback(context, 1); } diff --git a/src/system/exception_handler.h b/src/system/exception_handler.h index 707960d..fbd3ea6 100644 --- a/src/system/exception_handler.h +++ b/src/system/exception_handler.h @@ -78,6 +78,10 @@ typedef struct _framerec { void setup_os_exceptions(void); +unsigned char dsi_exception_cb(void *context); +unsigned char isi_exception_cb(void *context); +unsigned char program_exception_cb(void *context); + #ifdef __cplusplus } #endif diff --git a/src/tcpgecko/hardware_breakpoints.S b/src/tcpgecko/hardware_breakpoints.S new file mode 100644 index 0000000..c203bfe --- /dev/null +++ b/src/tcpgecko/hardware_breakpoints.S @@ -0,0 +1,17 @@ +#include "../utils/ppc_asm.h" + +.set dabr, 0x3F5 + +# .section text + +.global KernelSetDABR +KernelSetDABR: + mtspr dabr, r3 + blr + +.global SC0x2D_KernelSetDABR +SC0x2D_KernelSetDABR: + li r0, 0x2D00 + sc + nop + blr diff --git a/src/tcpgecko/hardware_breakpoints.hpp b/src/tcpgecko/hardware_breakpoints.h similarity index 59% rename from src/tcpgecko/hardware_breakpoints.hpp rename to src/tcpgecko/hardware_breakpoints.h index 2b4e2c2..6e5f78f 100644 --- a/src/tcpgecko/hardware_breakpoints.hpp +++ b/src/tcpgecko/hardware_breakpoints.h @@ -1,13 +1,105 @@ -#include "stringify.h" +#include #include "../dynamic_libs/os_functions.h" -#include "threads.h" +#include "../system/exception_handler.h" +#include "../kernel/syscalls.h" +#include "../common/common.h" #include "../utils/logger.h" -#include "main.h" -#include "utilities.h" #include "software_breakpoints.h" -#ifndef TCPGECKO_BREAKPOINTS_H -#define TCPGECKO_BREAKPOINTS_H +#ifndef TCPGECKO_HARDWARE_BREAKPOINTS_H +#define TCPGECKO_HARDWARE_BREAKPOINTS_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Fix a gap in exception_handler.h + Yes, this is the dsisr. +*/ +#define dsisr exception_specific0 +#define DSISR_DABR_MATCH 0x400000 + +extern /* kernelmode */ void KernelSetDABR(unsigned int dabr); + +extern void SC0x2D_KernelSetDABR(unsigned int dabr); + +static void RegisterDataBreakpointHandler(unsigned char (*breakpointHandler)(OSContext *ctx)); + +static void DataBreakpoints_Install(); + +static unsigned char DataBreakpoints_DSIHandler(void *ctx); + +static unsigned char (*bHandler)(OSContext *ctx); + +static void RegisterDataBreakpointHandler(unsigned char (*breakpointHandler)(OSContext *ctx)) { + bHandler = breakpointHandler; +} + +static inline int getDABRAddress(void *interruptedContext) { + OSContext *context = (OSContext *) interruptedContext; + return (int) context->srr0; // Offset 0xA4 +} + +unsigned char basicDABRBreakpointHandler(OSContext *context) { + log_print("Getting DABR address\n"); + int address = getDABRAddress(context); + log_printf("Got DABR address: %08x\n", address); + + if (OSIsAddressValid((const void *) address)) { + log_printf("Data breakpoint address: %x08\n", address); + } else { + log_printf("Data breakpoint invalid address: %x08\n", address); + } + + return 0; +} + +static void SetDataBreakpoint(unsigned int address, bool read, bool write) { + log_print("Before installing...\n"); + DataBreakpoints_Install(); + log_print("After installing...\n"); + RegisterDataBreakpointHandler(basicDABRBreakpointHandler); + log_print("After registering...\n"); + + unsigned int dabr = address & ~0b00000111; //GCC \o/ + log_printf("DABR 1: %08x\n", dabr); + dabr |= 0b00000100; //enable translation + log_printf("DABR 2: %08x\n", dabr); + if (read) { + dabr |= 0b00000001; //break on read + log_printf("DABR 3: %08x\n", dabr); + } + if (write) { + dabr |= 0b00000010; //break on write + log_printf("DABR 4: %08x\n", dabr); + } + + log_print("Setting DABR...\n"); + SC0x2D_KernelSetDABR(dabr); + log_print("DABR set!\n"); +} + +static unsigned char DataBreakpoints_DSIHandler(void *ctx) { + log_print("DSI handler\n"); + OSContext *context = (OSContext *) ctx; + if (context->dsisr & DSISR_DABR_MATCH) { + log_print("Running BP handler\n"); + return bHandler(context); + } + + log_print("DSI exception\n"); + return dsi_exception_cb(ctx); +} + +static void DataBreakpoints_Install() { + kern_write((void *) (OS_SPECIFICS->addr_KernSyscallTbl1 + (0x2D * 4)), (unsigned int) &KernelSetDABR); + kern_write((void *) (OS_SPECIFICS->addr_KernSyscallTbl2 + (0x2D * 4)), (unsigned int) &KernelSetDABR); + kern_write((void *) (OS_SPECIFICS->addr_KernSyscallTbl3 + (0x2D * 4)), (unsigned int) &KernelSetDABR); + kern_write((void *) (OS_SPECIFICS->addr_KernSyscallTbl4 + (0x2D * 4)), (unsigned int) &KernelSetDABR); + kern_write((void *) (OS_SPECIFICS->addr_KernSyscallTbl5 + (0x2D * 4)), (unsigned int) &KernelSetDABR); + + OSSetExceptionCallback((u8) OS_EXCEPTION_DSI, &DataBreakpoints_DSIHandler); +} // Special purpose registers #define IABR 0x3F2 @@ -44,11 +136,6 @@ static inline int getIABRAddress() { return mfspr(IABR); } -static inline int getDABRAddress(void *interruptedContext) { - OSContext *context = (OSContext *) interruptedContext; - return (int) context->srr0; // Offset 0xA4 -} - static inline int getIABRMatch(void *interruptedContext) { OSContext *context = (OSContext *) interruptedContext; return (int) context->exception_specific1; // Offset 0x98 @@ -145,4 +232,8 @@ unsigned char breakPointHandler(void *interruptedContext) { return 0; } -#endif \ No newline at end of file +#ifdef __cplusplus +} //extern "C" +#endif + +#endif //TCPGECKO_HARDWARE_BREAKPOINTS_H diff --git a/src/tcpgecko/tcp_gecko.cpp b/src/tcpgecko/tcp_gecko.cpp index 96eed7e..9deaa88 100644 --- a/src/tcpgecko/tcp_gecko.cpp +++ b/src/tcpgecko/tcp_gecko.cpp @@ -14,7 +14,7 @@ #include "../dynamic_libs/gx2_functions.h" #include "../dynamic_libs/fs_functions.h" #include "../utils/logger.h" -#include "hardware_breakpoints.hpp" +#include "hardware_breakpoints.h" #include "linked_list.h" #include "address.h" #include "stack.h" @@ -23,6 +23,8 @@ #include "../patcher/function_patcher_gx2.h" #include "raw_assembly_cheats.h" #include "sd_cheats.h" +#include "threads.h" +#include "software_breakpoints.h" void *client; void *commandBlock; @@ -199,6 +201,12 @@ unsigned int receiveString(struct pygecko_bss_t *bss, OSScreenFlipBuffersEx(1); }*/ + +/* TODO + https://github.com/dimok789/ddd/blob/ca33ad1c759a0b67db33eedcf7fc4537198aad9c/src/discdumper.c#L667-L693 + int ret = FSBindMount(pClient, pCmd, metaDir, "/vol/meta", -1); + FSBindUnmount(pClient, pCmd, metaDir, -1); + */ void considerInitializingFileSystem() { if (!client) { // Initialize the file system @@ -1324,7 +1332,8 @@ static int processCommands(struct pygecko_bss_t *bss, int clientfd) { bufferIndex += sizeof(bool); bool write = buffer[bufferIndex]; bufferIndex += sizeof(bool); - setDataBreakpoint(address, read, write); + SetDataBreakpoint(address, read, write); + // setDataBreakpoint(address, read, write); break; } @@ -1570,4 +1579,4 @@ void startTCPGecko() { OSResumeThread(thread); log_print("TCP Gecko started...\n"); -} \ No newline at end of file +} diff --git a/src/utils/ppc_asm.h b/src/utils/ppc_asm.h new file mode 100644 index 0000000..da07031 --- /dev/null +++ b/src/utils/ppc_asm.h @@ -0,0 +1,62 @@ +#ifndef PPC_ASM_H +#define PPC_ASM_H +/* + * + * Definitions used by various bits of low-level assembly code on PowerPC. + * + * Copyright (C) 1995-1999 Gary Thomas, Paul Mackerras, Cort Dougan. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. + */ + +/* Condition Register Bit Fields */ + +#define cr0 0 +#define cr1 1 +#define cr2 2 +#define cr3 3 +#define cr4 4 +#define cr5 5 +#define cr6 6 +#define cr7 7 + + +/* General Purpose Registers (GPRs) */ + +#define r0 0 +#define r1 1 +#define r2 2 +#define r3 3 +#define r4 4 +#define r5 5 +#define r6 6 +#define r7 7 +#define r8 8 +#define r9 9 +#define r10 10 +#define r11 11 +#define r12 12 +#define r13 13 +#define r14 14 +#define r15 15 +#define r16 16 +#define r17 17 +#define r18 18 +#define r19 19 +#define r20 20 +#define r21 21 +#define r22 22 +#define r23 23 +#define r24 24 +#define r25 25 +#define r26 26 +#define r27 27 +#define r28 28 +#define r29 29 +#define r30 30 +#define r31 31 + +#endif /* PPC_ASM_H */ diff --git a/tcpgecko.elf b/tcpgecko.elf index 906dc41aafad3eecd098a382d704cb522b07060a..86a3dda86d7ad4d574dc56f694675c115aa3f05b 100644 GIT binary patch delta 37114 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 M2SO44Kb9f?2V))kLI3~& delta 33980 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 bgnjrjVSiU>?}Xn00K*4g`5MB1Scm){gItYw