RO services: Difference between revisions

From Nintendo Switch Brew
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
Prior to 3.0.0, ro was included as part of [[Loader services]]. Despite the separation, the service name ldr:ro is retained to maintain compatibility with old games.
Prior to 3.0.0, ro was included as part of [[Loader_services]]. Despite the separation, the service name ldr:ro is retained to maintain compatibility with old games.


= ldr:ro, ro:1 =
= ldr:ro, ro:1 =
Line 6: Line 6:
[3.0.0+] This is "nn::ro::detail::IRoInterface".
[3.0.0+] This is "nn::ro::detail::IRoInterface".


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


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 12: Line 12:
! Cmd || Name
! Cmd || Name
|-
|-
| 0 || [[#LoadNro]]
| 0 || [[#LoadModule]]
|-
|-
| 1 || UnloadNro
| 1 || [[#UnloadModule]]
|-
|-
| 2 || [[#LoadNrr]]  
| 2 || [[#RegisterModuleInfo]]  
|-
|-
| 3 || UnloadNrr
| 3 || [[#UnregisterModuleInfo]]
|-
|-
| 4 || [[#Initialize]]
| 4 || [[#Initialize]]
|-
|-
| 10 || [7.0.0+] [[#LoadNrrEx]]
| 10 || [7.0.0+] [[#RegisterModuleInfo2]]
|}
|}


== LoadNro ==
== LoadModule ==
{| class="wikitable" border="1"
Takes a PID-descriptor, 5 input u64s ('''client_pid_deprecated''', '''nro_address''', '''nro_size''', '''bss_address''' and '''bss_size'''). Returns an output u64 ('''out_address''').
|-
 
! Word || Value
== UnloadModule ==
|-
Takes a PID-descriptor and 2 input u64s ('''client_pid_deprecated''' and '''nro_address''').  
| 0 || 0x00000004
|-
| 1 || 0x80000012
|-
| 2 || 0x00000001
|- style="border-top: double"
| 0-1 || Pid
|- style="border-top: double"
| 0 || "SCFI"
|-
| 1 || 0x00000000
|-
| 2 || Always 0.
|-
| 3 || Nro heap address
|-
| 4 || Nro size
|-
| 5 || Bss backing heap address
|-
| 6 || Bss size
|}


== LoadNrr ==
== RegisterModuleInfo ==
{| class="wikitable" border="1"
Takes a PID-descriptor and 3 input u64s ('''client_pid_deprecated''', '''nrr_address''' and '''nrr_size''').  
|-
! Word || Value
|-
| 0 || 0x00000004
|-
| 1 || 0x8000000E
|-
| 2 || 0x00000001
|-
|- style="border-top: double"
| 0-1 || Pid
|- style="border-top: double"
| 0 || "SFCI"
|-
| 1 || 0x00000002
|-
| 2 || Always 0.
|-
| 3 || Nrr address
|-
| 4 || 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 ==
Takes a PID-descriptor and 2 input u64s ('''client_pid_deprecated''' and '''nrr_address''').


== Initialize ==
== Initialize ==
Takes PID-descriptor, a process handle and an input u64 ('''client_pid_deprecated''').
== RegisterModuleInfo2 ==
Takes a PID-descriptor, a process handle and 3 input u64s ('''client_pid_deprecated''', '''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.
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).
= ro:dmnt =
This is "nn::ro::detail::IDebugMonitorInterface".
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Word || Value
! Cmd || Name
|-
| 0 || 0x00000004
|-
| 1 || 0x8000000A
|-
| 2 || 0x00000003
|- style="border-top: double"
| 0-1 || Pid
|-
| 2 || Process handle (0xFFFF8001)
|- style="border-top: double"
| 0 || "SFCI"
|-
| 1 || 0x00000004
|-
|-
| 2 || Always 0.
| 0 || [[#GetProcessModuleInfo]]
|}
|}


== LoadNrrEx ==
== GetProcessModuleInfo ==
Takes in a u64 nrr_address, a u64 nrr_size, a pid descriptor, and a process handle.
Same as [[#Loader_services|GetProcessModuleInfo]] from [[Loader_services#ldr:dmnt|ldr:dmnt]].
 
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.
 
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).


[[Category:Services]]
[[Category:Services]]

Revision as of 22:07, 22 February 2020

Prior to 3.0.0, ro was included as part of Loader_services. 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, 5 input u64s (client_pid_deprecated, nro_address, nro_size, bss_address and bss_size). Returns an output u64 (out_address).

UnloadModule

Takes a PID-descriptor and 2 input u64s (client_pid_deprecated and nro_address).

RegisterModuleInfo

Takes a PID-descriptor and 3 input u64s (client_pid_deprecated, nrr_address and nrr_size).

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

UnregisterModuleInfo

Takes a PID-descriptor and 2 input u64s (client_pid_deprecated and nrr_address).

Initialize

Takes PID-descriptor, a process handle and an input u64 (client_pid_deprecated).

RegisterModuleInfo2

Takes a PID-descriptor, a process handle and 3 input u64s (client_pid_deprecated, 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.

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.