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]] |