RO services: Difference between revisions

From Nintendo Switch Brew
Jump to navigation Jump to search
fixup ro command names
 
Line 26: Line 26:


== MapManualLoadModuleMemory ==
== MapManualLoadModuleMemory ==
Takes a PID-descriptor and 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''').


== UnmapManualLoadModuleMemory ==
== 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''').  


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


== RegisterModuleInfoWithUserProcessHandle ==
== 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 [[#RegisterModuleInfo|RegisterModuleInfo]], 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.  

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.