NSO: Difference between revisions
(One intermediate revision by the same user not shown) | |||
Line 149: | Line 149: | ||
| offset to runtime-generated module object. typically equal to .bss base. | | offset to runtime-generated module object. typically equal to .bss base. | ||
|} | |} | ||
=Arguments= | |||
Loader maps memory and writes the [[Loader_services#AddProcessToLaunchQueue|arguments]] to {end of rwdata section specified by last SegmentHeader}. Official processes use argdata_addr = {page-aligned _end}. svcQueryMemory is used by official sw to verify that argdata_addr is mapped RW, since this memory is only mapped when arguments are specified via that command. Afterwards, official sw aligns the argdata_addr to 4-bytes. Structure located at argdata_addr: | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 || 0x4 || This is the total allocated space relative to argdata_addr, used for calculating the max size of the argv ptr array. Normally 0x9000? | |||
|- | |||
| 0x4 || 0x4 || This is the total_bytesize of the actual argdata string. | |||
|- | |||
| 0x8 || 0x18 || Unused by official sw. | |||
|- | |||
| 0x20 || See above || Actual argdata string. | |||
|} | |||
argv_ptrarray written by official processes is at (actual_argdata_string+(actual_argdata_size*2)) + 0x9 & ~0x7. |