Skip to content

Commit

Permalink
main: Introduce eboot function hooking
Browse files Browse the repository at this point in the history
Signed-off-by: Michal Chvila <miso.chvila@gmail.com>
  • Loading branch information
Electry committed Aug 30, 2018
1 parent 52fe04c commit abe5cbc
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 0 deletions.
19 changes: 19 additions & 0 deletions main.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include "main.h"

#define MAX_INJECTS_NUM 15
#define MAX_HOOKS_NUM 2

// sceDisplaySetFrameBuf hook
static SceUID sceDisplaySetFrameBuf_hookid;
Expand All @@ -21,6 +22,11 @@ static tai_hook_ref_t sceDisplaySetFrameBuf_hookref = {0};
static uint8_t injects_num = 0;
static SceUID injects[MAX_INJECTS_NUM] = {0};

// eboot hooks
static uint8_t hooks_num = 0;
static SceUID hooks[MAX_HOOKS_NUM] = {0};
tai_hook_ref_t hooks_ref[MAX_HOOKS_NUM] = {0};

static char titleid[16];
static tai_module_info_t info = {0};

Expand All @@ -33,6 +39,14 @@ void injectData(SceUID modid, int segidx, uint32_t offset, const void *data, siz
injects[injects_num] = taiInjectData(modid, segidx, offset, data, size);
injects_num++;
}
void hookFunction(SceUID modid, int segidx, uint32_t offset, int thumb, const void *func) {
hooks[hooks_num] = taiHookFunctionOffset(&hooks_ref[hooks_num], modid, segidx, offset, thumb, func);
hooks_num++;
}
void hookFunctionImport(uint32_t nid, const void *func) {
hooks[hooks_num] = taiHookFunctionImport(&hooks_ref[hooks_num], TAI_MAIN_MODULE, TAI_ANY_LIBRARY, nid, func);
hooks_num++;
}

int sceDisplaySetFrameBuf_patched(const SceDisplayFrameBuf *pParam, int sync) {

Expand Down Expand Up @@ -126,5 +140,10 @@ int module_stop(SceSize argc, const void *args) {
taiInjectRelease(injects[injects_num]);
}

while (hooks_num-- > 0) {
if (hooks[hooks_num] >= 0)
taiHookRelease(hooks[hooks_num], hooks_ref[hooks_num]);
}

return SCE_KERNEL_STOP_SUCCESS;
}
4 changes: 4 additions & 0 deletions main.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,9 @@
#define _MAIN_H_

void injectData(SceUID modid, int segidx, uint32_t offset, const void *data, size_t size);
void hookFunction(SceUID modid, int segidx, uint32_t offset, int thumb, const void *func);
void hookFunctionImport(uint32_t nid, const void *func);

extern tai_hook_ref_t hooks_ref[];

#endif

0 comments on commit abe5cbc

Please sign in to comment.