Result initHb();\r
void exitHb();\r
\r
+// flushes/invalidates entire data/instruction cache\r
+// can be useful when writing code to executable pages\r
+Result HB_FlushInvalidateCache(void);\r
+\r
+// fetches the address for ninjhax bootloader addresses, useful for running 3dsx executables\r
+// void (*callBootloader)(Handle hb, Handle file);\r
+// void (*setArgs)(u32* src, u32 length);\r
Result HB_GetBootloaderAddresses(void** load3dsx, void** setArgv);\r
+\r
+// changes the permissions of a given number of pages at address addr to mode\r
+// should it fail, the appropriate kernel error code will be returned and *reprotectedPages (if not NULL)\r
+// will be set to the number of sequential pages which were successfully reprotected + 1\r
Result HB_ReprotectMemory(u32* addr, u32 pages, u32 mode, u32* reprotectedPages);\r
\r
#endif\r
svcCloseHandle(hbHandle);\r
}\r
\r
+Result HB_FlushInvalidateCache(void)\r
+{\r
+ Result ret = 0;\r
+ u32 *cmdbuf = getThreadCommandBuffer();\r
+\r
+ cmdbuf[0] = 0x00010042;\r
+ cmdbuf[1] = 0x00000000;\r
+ cmdbuf[2] = 0x00000000;\r
+ cmdbuf[3] = 0xFFFF8001;\r
+\r
+ if((ret = svcSendSyncRequest(hbHandle))!=0) return ret;\r
+ \r
+ return (Result)cmdbuf[1];\r
+}\r
+\r
Result HB_GetBootloaderAddresses(void** load3dsx, void** setArgv)\r
{\r
Result ret = 0;\r