Difference between revisions of "RO:LoadExeCRO"

From 3dbrew
Jump to navigation Jump to search
Line 54: Line 54:
 
| Unknown
 
| Unknown
 
|}
 
|}
 +
 +
=Description=
 +
This loads a [[CRO0|CRO]], and maps virtual memory for it with the required memory-permissions. The address for cmdword[2] is calculated by the user-process like so: when cmdword[1](inputaddr) is <0x08000000, the address used is the same one from inputaddr. Otherwise, the address is: mapvaddr = inputaddr - (0x08000000 - <main-process .text address + .text, .rodata, .data, and .bss size aligned to pagesize>);

Revision as of 08:00, 19 January 2014

Request

Index Word Description
0 Header code [0x000402C2]
1 Process-memory input CRO address(usually located on the process heap).
2 Process-memory address where the CRO will be mapped, starting at the CRO header(normally in the 0x00100000-0x04000000 range).
3 Total size of input CRO.
4 Process-memory buffer address to use for the CRO <data-section0>, all CRO <data-section0> addresses are automatically adjusted to use this address.
5 Usually zero?
6 ?
7 Process-memory buffer address to use for the CRO <data-section1>, all CRO <data-section1> addresses are automatically adjusted to use this address.
8-11 Unknown
12 Must be zero
13 KProcess handle

Response

Index Word Description
0 Header code
1 Result code
2 Unknown

Description

This loads a CRO, and maps virtual memory for it with the required memory-permissions. The address for cmdword[2] is calculated by the user-process like so: when cmdword[1](inputaddr) is <0x08000000, the address used is the same one from inputaddr. Otherwise, the address is: mapvaddr = inputaddr - (0x08000000 - <main-process .text address + .text, .rodata, .data, and .bss size aligned to pagesize>);