Difference between revisions of "RO services"

From Nintendo Switch Brew
Jump to navigation Jump to search
 
(One intermediate revision by the same user not shown)
Line 26: Line 26:
  
 
== LoadModule ==
 
== LoadModule ==
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 and 4 input u64s ('''nro_address''', '''nro_size''', '''bss_address''' and '''bss_size'''). Returns an output u64 ('''out_address''').
  
 
== UnloadModule ==
 
== UnloadModule ==
Line 45: Line 45:
 
Takes a PID-descriptor, a process handle and 2 input u64s ('''nrr_address''' and '''nrr_size''').  
 
Takes a PID-descriptor, a process handle 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 17:45, 23 February 2020

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 #LoadModule
1 #UnloadModule
2 #RegisterModuleInfo
3 #UnregisterModuleInfo
4 #Initialize
10 [7.0.0+] #RegisterModuleInfo2

LoadModule

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

UnloadModule

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

RegisterModuleInfo

Takes a PID-descriptor 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 and an input u64s (nrr_address).

Initialize

Takes PID-descriptor and a process handle.

RegisterModuleInfo2

Takes a PID-descriptor, a process handle 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.