#include "DetourHook.hpp" // hook any function using detour class DetourHook* StatSetIntHk; uint32_t StatSetIntHook(uint32_t statHash, uint32_t value, uint32_t save) { printf("StatSetIntHook\n"); printf("statHash 0x%X\n", statHash); return StatSetIntHk->GetOriginal(statHash, value, save); } ImportExportHook* sysPpuThreadCreateHk; int sysPpuThreadCreateHook(sys_ppu_thread_t* thread_id, void(*entry)(uint64_t), uint64_t arg, int prio, size_t stacksize, uint64_t flags, const char* threadname) { printf("sysPpuThreadCreateHook\n"); printf("thread_id: 0x%016llX\n", thread_id); printf("entry: 0x%016llX\n", entry); printf("arg: 0x%016llX\n", arg); printf("prio: 0x%X\n", prio); printf("stacksize: 0x%X\n", stacksize); printf("flags: 0x%016llX\n", flags); printf("threadname: %s\n", threadname); return sysPpuThreadCreateHk->GetOriginal(thread_id, entry, arg, prio, stacksize, flags, threadname); } ImportExportHook* cellFsOpenHk; CellFsErrno cellFsOpenHook(const char* path, int flags, int* fd, const void* arg, uint64_t size) { printf("cellFsOpenHook\n"); printf("path: %s\n", path); printf("flags: 0x%X\n", flags); printf("fd: 0x%X\n", fd); printf("arg: 0x%X\n", arg); printf("size: 0x%X\n", size); if (strcmp(path, "/dev_hdd0/game/BLES01807/USRDIR/dlc/dlc_mpPilot/DLC.edat") == 0) { path = "/dev_hdd0/tmp/Semjases/Mods/dlc/dlc_mpPilot/DLC.edat"; } return cellFsOpenHk->GetOriginal(path, flags, fd, arg, size); } int main() { // https://imgur.com/rdBtu09 StatSetIntHk = new DetourHook(0x42BE0C, (uintptr_t)StatSetIntHook); sysPpuThreadCreateHk = new ImportExportHook(ImportExportHook::Import, "sysPrxForUser", 0x24A1EA07, (uintptr_t)sysPpuThreadCreateHook); cellFsOpenHk = new ImportExportHook(ImportExportHook::Import, "sys_fs", 0x718BF5F8, (uintptr_t)cellFsOpenHook); return 0; }