From eec1fc2fcc07cb1f6c723f837045c153a76f4a13 Mon Sep 17 00:00:00 2001 From: yellows8 Date: Sat, 13 Jan 2018 23:49:54 -0500 Subject: [PATCH] Added svcSetProcessMemoryPermission and svcMapProcessCodeMemory/svcUnmapProcessCodeMemory. Added PERM_X. --- nx/include/switch/kernel/svc.h | 3 +++ nx/include/switch/types.h | 1 + nx/source/kernel/svc.s | 15 +++++++++++++++ 3 files changed, 19 insertions(+) diff --git a/nx/include/switch/kernel/svc.h b/nx/include/switch/kernel/svc.h index e2d125d0..de93af0c 100644 --- a/nx/include/switch/kernel/svc.h +++ b/nx/include/switch/kernel/svc.h @@ -77,7 +77,10 @@ Result svcQueryDebugProcessMemory(MemoryInfo* meminfo_ptr, u32* pageinfo, Handle Result svcReadDebugProcessMemory(void* buffer, Handle debug, u64 addr, u64 size); Result svcWriteDebugProcessMemory(Handle debug, void* buffer, u64 addr, u64 size); Result svcManageNamedPort(Handle* portServer, const char* name, s32 maxSessions); +Result svcSetProcessMemoryPermission(Handle proc, u64 addr, u64 size, u32 perm); Result svcMapProcessMemory(void* dst, Handle proc, u64 src, u64 size); +Result svcMapProcessCodeMemory(Handle proc, u64 dst, u64 src, u64 size); +Result svcUnmapProcessCodeMemory(Handle proc, u64 dst, u64 src, u64 size); Result svcCreateProcess(Handle* out, void* proc_info, u32* caps, u64 cap_num); Result svcStartProcess(Handle proc, s32 main_prio, s32 default_cpu, u32 stack_size); u64 svcCallSecureMonitor(SecmonArgs* regs); diff --git a/nx/include/switch/types.h b/nx/include/switch/types.h index 2ad6cbbd..b23758e0 100644 --- a/nx/include/switch/types.h +++ b/nx/include/switch/types.h @@ -48,6 +48,7 @@ typedef enum { PERM_NONE = 0, PERM_R = 1, PERM_W = 2, + PERM_X = 4, PERM_RW = PERM_R | PERM_W, PERM_DONTCARE = 0x10000000 } Permission; diff --git a/nx/source/kernel/svc.s b/nx/source/kernel/svc.s index 06979ba7..33c9abf6 100644 --- a/nx/source/kernel/svc.s +++ b/nx/source/kernel/svc.s @@ -324,11 +324,26 @@ SVC_BEGIN svcManageNamedPort ret SVC_END +SVC_BEGIN svcSetProcessMemoryPermission + svc 0x73 + ret +SVC_END + SVC_BEGIN svcMapProcessMemory svc 0x74 ret SVC_END +SVC_BEGIN svcMapProcessCodeMemory + svc 0x77 + ret +SVC_END + +SVC_BEGIN svcUnmapProcessCodeMemory + svc 0x78 + ret +SVC_END + SVC_BEGIN svcCreateProcess str x0, [sp, #-16]! svc 0x79