//Patches void patchFirm(){ //Part1: Set MPU for payload area memcpy((u8*)mpuCode(), mpu, sizeof(mpu)); //Part2: Disable signature checks memcpy((u8*)sigPatch(1), sigPat1, sizeof(sigPat1)); memcpy((u8*)sigPatch(2), sigPat2, sizeof(sigPat2)); //Part3: Create arm9 thread fileRead((u8*)threadCode(), "/rei/thread/arm9.bin", 0); memcpy((u8*)threadHook(1), th1, sizeof(th1)); memcpy((u8*)threadHook(2), th2, sizeof(th2)); }
//Nand redirection void loadEmu(void){ //Read emunand code from SD u32 code = emuCode(); const char path[] = "/rei/emunand/emunand.bin"; u32 size = fileSize(path); fileRead(code, path, size); //Find and patch emunand related offsets u32 *pos_sdmmc = memsearch(code, "SDMC", size, 4); u32 *pos_offset = memsearch(code, "NAND", size, 4); u32 *pos_header = memsearch(code, "NCSD", size, 4); getSDMMC(firmLocation, &sdmmcOffset, firmSize); getEmunandSect(&emuOffset, &emuHeader); getEmuRW(firmLocation, firmSize, &emuRead, &emuWrite); *pos_sdmmc = sdmmcOffset; *pos_offset = emuOffset; *pos_header = emuHeader; //Add emunand hooks memcpy((u8*)emuRead, nandRedir, sizeof(nandRedir)); memcpy((u8*)emuWrite, nandRedir, sizeof(nandRedir)); memcpy((u8*)mpuCode(), mpu, sizeof(mpu)); }