Loader services: Difference between revisions

No edit summary
(13 intermediate revisions by 5 users not shown)
Line 1: Line 1:
= ldr:shel =
This is "nn::ldr::detail::IShellInterface".
{| class="wikitable" border="1"
|-
! Cmd || Name
|-
| 0 || [[#SetProgramArgument]]
|-
| 1 || [[#FlushArguments]]
|}
== SetProgramArgument ==
Takes a type-0x9 input buffer with launch arguments (as string), an u32 (size of arguments string), and an input title-id.
Loads a process for the specified title-id and passes along the supplied arguments.
Loaded processes are kept in a queue waiting for PM to launch them. The maximum number of waiting processes in this list is 10.
== FlushArguments ==
Clears the loaded processes waiting queue.
= ldr:dmnt =
= ldr:dmnt =
This is "nn::ldr::detail::IDebugMonitorInterface".
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Cmd || Name
! Cmd || Name
|-
|-
| 0 || AddProcessToDebugLaunchQueue
| 0 || [[#SetProgramArgument]]
|-
|-
| 1 || ClearDebugLaunchQueue
| 1 || [[#FlushArguments]]
|-
|-
| 2 ||
| 2 || [[#GetProcessModuleInfo]]
|}
|}


== AddProcessToDebugLaunchQueue ==
== GetProcessModuleInfo ==
Same as [[Loader_services#AddProcessToLaunchQueue|AddProcessToLaunchQueue]] but for processes marked as debug.
Takes in a u64 Process ID, and a C descriptor out array of [[#ModuleInfo]]s. Returns the number of ModuleInfos copied to output.


== ClearDebugLaunchQueue ==
= ldr:pm =
Same as [[Loader_services#ClearLaunchQueue|ClearLaunchQueue]] but for processes marked as debug.
This is "nn::ldr::detail::IProcessManagerInterface".


= ldr:pm =
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 26: Line 48:
| 1 || [[#GetProgramInfo]]
| 1 || [[#GetProgramInfo]]
|-
|-
| 2 || [[#RegisterTitle]]
| 2 || [[#PinProgram]]
|-
|-
| 3 || [[#UnregisterTitle]]
| 3 || [[#UnpinProgram]]
|}
|}


== GetProgramInfo ==
== GetProgramInfo ==
Takes a TitleId + StorageId, parses the NPDM, and writes output to a C descriptor buffer as follows:
Takes an ncm::ProgramLocation, parses the NPDM, and writes a [[#ProgramInfo]] to a C descriptor buffer.
 
== PinProgram ==
Takes an ncm::ProgramLocation, returns a u64 "PinId".
 
== UnpinProgram ==
Takes a PinId from [[#PinProgram]].
 
= ModuleInfo =
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x20
| ModuleId
|-
| 0x20
| 0x8
| ImageAddress
|-
| 0x28
| 0x8
| ImageSize
|}


= ProgramInfo =
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 62: Line 111:
| 0x8
| 0x8
| 0x8
| 0x8
| Title id
| TitleIdRange_Min
|-
|-
| 0x10
| 0x10
Line 95: Line 144:
| <Varies>
| <Varies>
| ACI0 [[NPDM#FS Access Control|FS Access Control]]
| ACI0 [[NPDM#FS Access Control|FS Access Control]]
|}
== RegisterTitle ==
Takes a TitleId + StorageId, returns an index.
== UnregisterTitle ==
Takes the index from [[#RegisterTitle]].
= ldr:shel =
{| class="wikitable" border="1"
|-
! Cmd || Name
|-
| 0 || [[#AddProcessToLaunchQueue]]
|-
| 1 || [[#ClearLaunchQueue]]
|}
== AddProcessToLaunchQueue ==
Takes a type-0x19 input buffer with launch arguments (as string), an u32 (size of arguments string), and an input title-id.
Loads a process for the specified title-id and passes along the supplied arguments.
Loaded processes are kept in a queue waiting for PM to launch them. The maximum number of waiting processes in this list is 10.
== ClearLaunchQueue ==
Clears the loaded processes waiting queue.
= ldr:ro =
{| class="wikitable" border="1"
|-
! Cmd || Name
|-
| 0 || [[#LoadNro]]
|-
| 1 || UnloadNro
|-
| 2 || [[#LoadNrr]]
|-
| 3 || UnloadNrr
|-
| 4 || [[#Initialize]]
|}
== LoadNro ==
{| class="wikitable" border="1"
|-
! Word || Value
|-
| 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 ==
{| class="wikitable" border="1"
|-
! 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
|}
== Initialize ==
{| class="wikitable" border="1"
|-
! Word || Value
|-
| 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.
|}
|}


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