From 3ae37e80e926d2e7e870fa2d5f62768eaa9fcef6 Mon Sep 17 00:00:00 2001 From: Maschell Date: Sat, 13 Jun 2020 14:12:47 +0200 Subject: [PATCH] Add option to patch a function for a certain process. --- include/function_patcher/fpatching_defines.h | 34 ++++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/include/function_patcher/fpatching_defines.h b/include/function_patcher/fpatching_defines.h index 32e7ab9..543ea94 100644 --- a/include/function_patcher/fpatching_defines.h +++ b/include/function_patcher/fpatching_defines.h @@ -80,6 +80,26 @@ typedef enum FunctionPatcherFunctionType { FUNCTION_PATCHER_DYNAMIC_FUNCTION = 1 } FunctionPatcherFunctionType; +typedef enum FunctionPatcherTargetProcess { + FP_TARGET_PROCESS_ALL = 0xFF, + FP_TARGET_PROCESS_ROOT_RPX = 1, + FP_TARGET_PROCESS_WII_U_MENU = 2, + FP_TARGET_PROCESS_TVII = 3, + FP_TARGET_PROCESS_E_MANUAL = 4, + FP_TARGET_PROCESS_HOME_MENU = 5, + FP_TARGET_PROCESS_ERROR_DISPLAY = 6, + FP_TARGET_PROCESS_MINI_MIIVERSE = 7, + FP_TARGET_PROCESS_BROWSER = 8, + FP_TARGET_PROCESS_MIIVERSE = 9, + FP_TARGET_PROCESS_ESHOP = 10, + FP_TARGET_PROCESS_PFID_11 = 11, + FP_TARGET_PROCESS_DOWNLOAD_MANAGER = 12, + FP_TARGET_PROCESS_PFID_13 = 13, + FP_TARGET_PROCESS_PFID_14 = 14, + FP_TARGET_PROCESS_GAME = 15, + FP_TARGET_PROCESS_GAME_AND_MENU = 16, +} FunctionPatcherTargetProcess; + #define FUNCTION_REPLACEMENT_DATA_STRUCT_VERSION 0x00000001 typedef struct function_replacement_data_t { @@ -95,16 +115,23 @@ typedef struct function_replacement_data_t { uint32_t restoreInstruction; /* [will be filled] Copy of the instruction we replaced to jump to our code. */ FunctionPatcherFunctionType functionType; /* [will be filled] */ uint8_t alreadyPatched; /* [will be filled] */ + FunctionPatcherTargetProcess targetProcess; /* [will be filled] */ } function_replacement_data_t; #define REPLACE_FUNCTION(x, lib, function_name) \ - REPLACE_FUNCTION_EX(x, lib, function_name, 0, 0) + REPLACE_FUNCTION_FOR_PROCESS(x, lib, function_name, FP_TARGET_PROCESS_GAME_AND_MENU) + +#define REPLACE_FUNCTION_FOR_PROCESS(x, lib, function_name, process) \ + REPLACE_FUNCTION_EX(x, lib, function_name, 0, 0, process) #define REPLACE_FUNCTION_VIA_ADDRESS(x, physicalAddress, effectiveAddress) \ - REPLACE_FUNCTION_EX(x, LIBRARY_OTHER, x, physicalAddress, effectiveAddress) + REPLACE_FUNCTION_VIA_ADDRESS_FOR_PROCESS(x, physicalAddress, effectiveAddress, FP_TARGET_PROCESS_ALL) -#define REPLACE_FUNCTION_EX(x, lib, function_name, physicalAddress, effectiveAddress) \ +#define REPLACE_FUNCTION_VIA_ADDRESS_FOR_PROCESS(x, physicalAddress, effectiveAddress, process) \ + REPLACE_FUNCTION_EX(x, LIBRARY_OTHER, x, physicalAddress, effectiveAddress, process) + +#define REPLACE_FUNCTION_EX(x, lib, function_name, physicalAddress, effectiveAddress, process) \ { \ FUNCTION_REPLACEMENT_DATA_STRUCT_VERSION, \ physicalAddress, \ @@ -118,6 +145,7 @@ typedef struct function_replacement_data_t { 0, \ FUNCTION_PATCHER_STATIC_FUNCTION, \ 0, \ + process \ } #define DECL_FUNCTION(res, name, ...) \