diff --git a/libctru/include/3ds/svc.h b/libctru/include/3ds/svc.h index 271408f..a95674b 100644 --- a/libctru/include/3ds/svc.h +++ b/libctru/include/3ds/svc.h @@ -86,6 +86,14 @@ s32 svcGetSystemInfo(s64* out, u32 type, s32 param); s32 svcGetProcessInfo(s64* out, Handle process, u32 type); s32 svcConnectToPort(volatile Handle* out, const char* portName); s32 svcSendSyncRequest(Handle session); +Result svcOpenProcess(Handle* process, u32 processId); s32 svcGetProcessId(u32 *out, Handle handle); s32 svcGetThreadId(u32 *out, Handle handle); s32 svcOutputDebugString(const char* str, int length); +Result svcCreatePort(Handle* portServer, Handle* portClient, const char* name, s32 maxSessions); +Result svcDebugActiveProcess(Handle* debug, u32 processId); +Result svcGetProcessList(s32* processCount, u32* processIds, s32 processIdMaxCount); +Result svcReadProcessMemory(void* buffer, Handle debug, u32 addr, u32 size); +Result svcMapProcessMemory(Handle process, u32 startAddr, u32 endAddr); +Result svcUnmapProcessMemory(Handle process, u32 startAddr, u32 endAddr); +Result svcQueryProcessMemory(MemInfo* info, PageInfo* out, Handle process, u32 addr); diff --git a/libctru/source/svc.s b/libctru/source/svc.s index 555eb13..18ee93e 100644 --- a/libctru/source/svc.s +++ b/libctru/source/svc.s @@ -247,6 +247,15 @@ svcSendSyncRequest: svc 0x32 bx lr +.global svcOpenProcess +.type svcOpenProcess, %function +svcOpenProcess: + push {r0} + svc 0x33 + pop {r2} + str r1, [r2] + bx lr + .global svcGetProcessId .type svcGetProcessId, %function svcGetProcessId: @@ -288,3 +297,67 @@ svcGetThreadId: ldr r3, [sp], #4 str r1, [r3] bx lr + +.global svcCreatePort +.type svcCreatePort, %function +svcCreatePort: + push {r0, r1} + svc 0x47 + ldr r3, [sp, #0] + str r1, [r3] + ldr r3, [sp, #4] + str r2, [r3] + add sp, sp, #8 + bx lr + +.global svcDebugActiveProcess +.type svcDebugActiveProcess, %function +svcDebugActiveProcess: + push {r0} + svc 0x60 + pop {r2} + str r1, [r2] + bx lr + +.global svcGetProcessList +.type svcGetProcessList, %function +svcGetProcessList: + push {r0, r1} + svc 0x65 + ldr r3, [sp, #0] + str r1, [r3] + ldr r3, [sp, #4] + str r2, [r3] + add sp, sp, #8 + bx lr + +.global svcReadProcessMemory +.type svcReadProcessMemory, %function +svcReadProcessMemory: + svc 0x6A + bx lr + +.global svcMapProcessMemory +.type svcMapProcessMemory, %function +svcMapProcessMemory: + svc 0x71 + bx lr + +.global svcUnmapProcessMemory +.type svcUnmapProcessMemory, %function +svcUnmapProcessMemory: + svc 0x72 + bx lr + +.global svcQueryProcessMemory +.type svcQueryProcessMemory, %function +svcQueryProcessMemory: + push {r0, r1, r4-r6} + svc 0x7D + ldr r6, [sp] + stm r6, {r1-r4} + ldr r6, [sp, #4] + str r5, [r6] + add sp, sp, #8 + pop {r4-r6} + bx lr