Difference between revisions of "SVC"
Jump to navigation
Jump to search
Line 327: | Line 327: | ||
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. | 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. |
Revision as of 18:34, 30 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 |
0x7 | SetProcessIdealProcessor |
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 Process, unsigned int Type) |
0x2C | GetThreadInfo |
0x2D | ConnectToPort(Handle*, char *PortName) |
0x2E | SendSyncRequest1 |
0x2F | SendSyncRequest2 |
0x30 | SendSyncRequest3 |
0x31 | SendSyncRequest4 |
0x32 | SendSyncRequest |
0x33 | OpenProcess(Handle*, unsigned int ProcessId) |
0x34 | OpenThread |
0x35 | GetProcessId(unsigned int *ProcessId, Handle Process) |
0x36 | GetProcessIdOfThread |
0x37 | GetThreadId |
0x38 | GetResourceLimit(Handle*, Handle Process) |
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.