RO services: Difference between revisions

From Nintendo Switch Brew
Jump to navigation Jump to search
No edit summary
 
(3 intermediate revisions by 2 users not shown)
Line 12: Line 12:
! Cmd || Name
! Cmd || Name
|-
|-
| 0 || [[#LoadModule]]
| 0 || [[#MapManualLoadModuleMemory]]
|-
|-
| 1 || [[#UnloadModule]]
| 1 || [[#UnmapManualLoadModuleMemory]]
|-
|-
| 2 || [[#RegisterModuleInfo]]  
| 2 || [[#RegisterModuleInfo]]  
Line 20: Line 20:
| 3 || [[#UnregisterModuleInfo]]
| 3 || [[#UnregisterModuleInfo]]
|-
|-
| 4 || [[#Initialize]]
| 4 || [[#RegisterProcessHandle]]
|-
|-
| 10 || [7.0.0+] [[#RegisterModuleInfo2]]
| 10 || [7.0.0+] [[#RegisterModuleInfoWithUserProcessHandle]]
|}
|}


== LoadModule ==
== MapManualLoadModuleMemory ==
Takes a PID-descriptor, 4 input u64s ('''nro_address''', '''nro_size''', '''bss_address''' and '''bss_size'''). Returns an output u64 ('''out_address''').  
Takes a PID-descriptor, an u64 pid_reserved, and 4 input u64s ('''nro_address''', '''nro_size''', '''bss_address''' and '''bss_size'''). Returns an output u64 ('''out_address''').


== UnloadModule ==
== UnmapManualLoadModuleMemory ==
Takes a PID-descriptor and an input u64 ('''nro_address''').  
Takes a PID-descriptor, an u64 pid_reserved, and an input u64 ('''nro_address''').  


== RegisterModuleInfo ==
== RegisterModuleInfo ==
Takes a PID-descriptor and 2 input u64s ('''nrr_address''' and '''nrr_size''').  
Takes a PID-descriptor, an u64 pid_reserved, and 2 input u64s ('''nrr_address''' and '''nrr_size''').  


[7.0.0+] [[NRR|NrrKind]] must be 0 (User) for this function to succeed.
[7.0.0+] [[NRR|NrrKind]] must be 0 (User) for this function to succeed.


== UnregisterModuleInfo ==
== UnregisterModuleInfo ==
Takes a PID-descriptor and an input u64s ('''nrr_address''').  
Takes a PID-descriptor, an u64 pid_reserved, and an input u64 ('''nrr_address''').  


== Initialize ==
== RegisterProcessHandle ==
Takes PID-descriptor and a process handle.
Takes a PID-descriptor, a process handle, and an u64 pid_reserved.


== RegisterModuleInfo2 ==
== RegisterModuleInfoWithUserProcessHandle ==
Takes a PID-descriptor, a process handle and 2 input u64s ('''nrr_address''' and '''nrr_size''').  
Takes a PID-descriptor, a process handle, an u64 pid_reserved, and 2 input u64s ('''nrr_address''' and '''nrr_size''').  


First, this validates that the pid descriptor matches the pid for the process handle sent to this->Initialize() earlier. Then, this calls the same function as LoadNrr, except using the passed process handle instead of the one sent to Initialize.  
First, this validates that the pid descriptor matches the pid for the process handle sent to this->Initialize() earlier. Then, this calls the same function as [[#RegisterModuleInfo|RegisterModuleInfo]], except using the passed process handle instead of the one sent to Initialize.  


When called from an ro:1 session, [[NRR|NrrKind]] must be 1 (JitPlugin). When called from ldr:ro session, [[NRR|NrrKind]] must be 0 (User).
When called from an ro:1 session, [[NRR|NrrKind]] must be 1 (JitPlugin). When called from ldr:ro session, [[NRR|NrrKind]] must be 0 (User).

Latest revision as of 23:15, 8 August 2025

Prior to 3.0.0, ro was included as part of Loader. Despite the separation, the service name ldr:ro is retained to maintain compatibility with old games.

ldr:ro, ro:1

[1.0.0-2.3.0] This is "nn::ldr::detail::IRoInterface"

[3.0.0+] This is "nn::ro::detail::IRoInterface".

[7.0.0+] ro:1 was added and is also "nn::ro::detail::IRoInterface".

Cmd Name
0 #MapManualLoadModuleMemory
1 #UnmapManualLoadModuleMemory
2 #RegisterModuleInfo
3 #UnregisterModuleInfo
4 #RegisterProcessHandle
10 [7.0.0+] #RegisterModuleInfoWithUserProcessHandle

MapManualLoadModuleMemory

Takes a PID-descriptor, an u64 pid_reserved, and 4 input u64s (nro_address, nro_size, bss_address and bss_size). Returns an output u64 (out_address).

UnmapManualLoadModuleMemory

Takes a PID-descriptor, an u64 pid_reserved, and an input u64 (nro_address).

RegisterModuleInfo

Takes a PID-descriptor, an u64 pid_reserved, and 2 input u64s (nrr_address and nrr_size).

[7.0.0+] NrrKind must be 0 (User) for this function to succeed.

UnregisterModuleInfo

Takes a PID-descriptor, an u64 pid_reserved, and an input u64 (nrr_address).

RegisterProcessHandle

Takes a PID-descriptor, a process handle, and an u64 pid_reserved.

RegisterModuleInfoWithUserProcessHandle

Takes a PID-descriptor, a process handle, an u64 pid_reserved, and 2 input u64s (nrr_address and nrr_size).

First, this validates that the pid descriptor matches the pid for the process handle sent to this->Initialize() earlier. Then, this calls the same function as RegisterModuleInfo, except using the passed process handle instead of the one sent to Initialize.

When called from an ro:1 session, NrrKind must be 1 (JitPlugin). When called from ldr:ro session, NrrKind must be 0 (User).

ro:dmnt

This is "nn::ro::detail::IDebugMonitorInterface".

Cmd Name
0 #GetProcessModuleInfo

GetProcessModuleInfo

Same as GetProcessModuleInfo from ldr:dmnt.