Difference between revisions of "SVC"

From 3dbrew
Jump to navigation Jump to search
Line 20: Line 20:
 
|-
 
|-
 
| 0x6  
 
| 0x6  
| GetProcessIdealProcessor
+
| GetProcessIdealProcessor(unsigned int *IdealProcessor, Handle KProcess)
 
|-
 
|-
 
| 0x7  
 
| 0x7  
| SetProcessIdealProcessor
+
| SetProcessIdealProcessor(Handle KProcess, unsigned int IdealProcessor)
 
|-
 
|-
 
| 0x8  
 
| 0x8  
Line 131: Line 131:
 
|-
 
|-
 
| 0x2B  
 
| 0x2B  
| GetProcessInfo(unsigned long long *Output, Handle Process, unsigned int Type)
+
| GetProcessInfo(unsigned long long *Output, Handle KProcess, unsigned int Type)
 
|-
 
|-
 
| 0x2C  
 
| 0x2C  
Line 155: Line 155:
 
|-
 
|-
 
| 0x33  
 
| 0x33  
| OpenProcess(Handle*, unsigned int ProcessId)
+
| OpenProcess(Handle *KProcess, unsigned int ProcessId)
 
|-
 
|-
 
| 0x34  
 
| 0x34  
Line 161: Line 161:
 
|-
 
|-
 
| 0x35  
 
| 0x35  
| GetProcessId(unsigned int *ProcessId, Handle Process)
+
| GetProcessId(unsigned int *ProcessId, Handle KProcess)
 
|-
 
|-
 
| 0x36  
 
| 0x36  
Line 170: Line 170:
 
|-
 
|-
 
| 0x38  
 
| 0x38  
| GetResourceLimit(Handle*, Handle Process)
+
| GetResourceLimit(Handle*, Handle KProcess)
 
|-
 
|-
 
| 0x39  
 
| 0x39  

Revision as of 06:40, 31 October 2012

Id Description
0x1 ControlMemory(Handle*, unsigned int Addr, unsigned int Unk, unsigned int Size, unsigned int Unk, unsigned int Permissions)
0x2 QueryMemory
0x3 ExitProcess()
0x4 GetProcessAffinityMask
0x5 SetProcessAffinityMask
0x6 GetProcessIdealProcessor(unsigned int *IdealProcessor, Handle KProcess)
0x7 SetProcessIdealProcessor(Handle KProcess, unsigned int IdealProcessor)
0x8 CreateThread
0x9 ExitThread()
0xA SleepThread
0xB GetThreadPriority
0xC SetThreadPriority
0xD GetThreadAffinityMask
0xE SetThreadAffinityMask
0xF GetThreadIdealProcessor
0x10 SetThreadIdealProcessor
0x11 GetCurrentProcessorNumber
0x12 Run
0x13 CreateMutex
0x14 ReleaseMutex
0x15 CreateSemaphore
0x16 ReleaseSemaphore
0x17 CreateEvent
0x18 SignalEvent
0x19 ClearEvent
0x1A CreateTimer
0x1B SetTimer
0x1C CancelTimer
0x1D ClearTimer
0x1E CreateMemoryBlock
0x1F MapMemoryBlock(Handle, unsigned int Addr, unsigned int Permissions, unsigned int Unk)
0x20 UnmapMemoryBlock
0x21 CreateAddressArbiter
0x22 ArbitrateAddress
0x23 CloseHandle(Handle)
0x24 WaitSynchronization1
0x25 WaitSynchronization2
0x26 SignalAndWait
0x27 DuplicateHandle
0x28 GetSystemTick
0x29 GetHandleInfo
0x2A GetSystemInfo
0x2B GetProcessInfo(unsigned long long *Output, Handle KProcess, unsigned int Type)
0x2C GetThreadInfo
0x2D ConnectToPort(Handle*, char *PortName)
0x2E SendSyncRequest1
0x2F SendSyncRequest2
0x30 SendSyncRequest3
0x31 SendSyncRequest4
0x32 SendSyncRequest
0x33 OpenProcess(Handle *KProcess, unsigned int ProcessId)
0x34 OpenThread
0x35 GetProcessId(unsigned int *ProcessId, Handle KProcess)
0x36 GetProcessIdOfThread
0x37 GetThreadId
0x38 GetResourceLimit(Handle*, Handle KProcess)
0x39 GetResourceLimitLimitValues
0x3A GetResourceLimitCurrentValues
0x3B GetThreadContext
0x3C Break(BreakReason)
0x3D OutputDebugString(void const, int) (Does nothing on non-debug units)
0x3E ControlPerformanceCounter(unsigned long long, int, unsigned int, unsigned long long)
0x47 CreatePort
0x48 CreateSessionToPort
0x49 CreateSession
0x4A AcceptSession
0x4B ReplyAndReceive1
0x4C ReplyAndReceive2
0x4D ReplyAndReceive3
0x4E ReplyAndReceive4
0x4F ReplyAndReceive
0x50 BindInterrupt(Interrupt, Handle, int, bool)
0x51 UnbindInterrupt(Interrupt, Handle)
0x52 InvalidateProcessDataCache(Handle, void*, unsigned int)
0x53 StoreProcessDataCache(Handle process, void const* addr, unsigned int size)
0x54 FlushProcessDataCache(Handle, void const*, unsigned int)
0x55 StartInterProcessDma(Handle* out, Handle dstProcess, void* dst, Handle srcProcess, const void* src, size_t size, const DmaConfig& config )
0x56 StopDma(Handle)
0x57 GetDmaState(DmaState*, Handle)
0x58 RestartDma(nn::Handle, void *, void const*, unsigned int, signed char)
0x60 DebugActiveProcess(Handle*, unsigned int ProcessID)
0x61 BreakDebugProcess(Handle)
0x62 TerminateDebugProcess(Handle)
0x63 GetProcessDebugEvent(DebugEventInfo*, Handle)
0x64 ContinueDebugEvent(Handle, unsigned int)
0x65 GetProcessList(int*, unsigned int*, int)
0x66 GetThreadList(int*, unsigned int*, int, Handle)
0x67 GetDebugThreadContext(ThreadContext*, Handle, unsigned int, unsigned int)
0x68 SetDebugThreadContext(Handle, unsigned int, ThreadContext const&, unsigned int)
0x69 QueryDebugProcessMemory(MemoryInfo*, PageInfo*, Handle, unsigned int)
0x6a ReadProcessMemory(void*, Handle, unsigned int, unsigned int)
0x6b WriteProcessMemory(Handle, void const*, unsigned int, unsigned int)
0x6c SetHardwareBreakPoint(int, unsigned int, unsigned int)
0x6d GetDebugThreadParam(long long *, int *, nn::Handle, unsigned int, nn::dmnt::DebugThreadParam) (Disabled on regular kernel)
0x70 ?
0x71 ?
0x72 ?
0x73 ?
0x74 Stubbed on regular kernel
0x75 ?
0x76 TerminateProcess(Handle)
0x77 ?
0x78 ?
0x79 ?
0x7a DisableExecuteNever(unsigned int Addr, unsigned int size) (Stubbed for regular kernel)
0x7c ?
0x7d ?

Calling svcBreak on retail will only terminate the process which called this SVC. Only ControlMemory and MapMemoryBlock can be used to map memory pages, these SVCs only support mapping execute-never R/W pages.

DebugActiveProcess is used to attach to a process for debugging. This SVC can only be used when the target process' ARM11 descriptors stored in the exheader have the kernel flag for "Enable debug" set. Otherwise when that flag is clear, the kernel flags for the process using this SVC must have the "Force debug" flag set.