Line 2: |
Line 2: |
| class [[KProcess]] extends [[KSynchronizationObject]]; | | class [[KProcess]] extends [[KSynchronizationObject]]; |
| | | |
− | Size : 0x260 bytes | + | Size : 0x270 (N3DS) / 0x268 bytes (O3DS post 8.x) / 0x260 bytes (O3DS pre 8.x). 0x4D8 bytes on ARM9. |
− | | + | The only field that changed is the [[KProcessHwInfo]] member instance. The definition of KProcess remain identical in all cases. |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Type
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | u32
| |
− | | Pointer to vtable
| |
− | |-
| |
− | | 0x4
| |
− | | u32
| |
− | | Reference count
| |
− | |-
| |
− | | 0x8
| |
− | | u32
| |
− | | Count of KThreads that sync with this object - number of nodes in the linked list below
| |
− | |-
| |
− | | 0xC
| |
− | | KLinkedListNode*
| |
− | | Pointer to first KLinkedListNode in node list of KThreads that sync with this object
| |
− | |-
| |
− | | 0x10
| |
− | | KLinkedListNode*
| |
− | | Pointer to last KLinkedListNode in node list of KThreads that sync with this object
| |
− | |-
| |
− | | 0x14
| |
− | | u32
| |
− | | Unknown
| |
− | |-
| |
− | | 0x18
| |
− | | u32
| |
− | | Unknown
| |
− | |-
| |
− | | 0x1C
| |
− | | [[KThread]]*
| |
− | | 0 or pointer to the thread the currently does something with the process object.
| |
− | |-
| |
− | | 0x20
| |
− | | s16
| |
− | | ?
| |
− | |-
| |
− | | 0x30
| |
− | | [[KLinkedListNode]]*
| |
− | | Pointer to first KLinkedListNode in list of KMemoryBlocks used by the process
| |
− | |-
| |
− | | 0x34
| |
− | | [[KLinkedListNode]]*
| |
− | | Pointer to last KLinkedListNode in list of KMemoryBlocks used by the process
| |
− | |-
| |
− | | 0x40
| |
− | | u32
| |
− | | Translation table base
| |
− | |-
| |
− | | 0x44
| |
− | | u8
| |
− | | Context ID
| |
− | |-
| |
− | | 0x50
| |
− | | u32
| |
− | | Size of the MMU table
| |
− | |-
| |
− | | 0x54
| |
− | | u32
| |
− | | Virtual address of the MMU table for this process
| |
− | |-
| |
− | | 0x58
| |
− | | u32
| |
− | | Total size of all thread context pages (0xFF4xxxxx) owned by threads that belong to this process
| |
− | |-
| |
− | | 0x5C
| |
− | | u32
| |
− | | Number of [[KThreadLocalPage|KThreadLocalPages]] used by this KProcess
| |
− | |-
| |
− | | 0x60
| |
− | | KLinkedListNode*
| |
− | | Pointer to first KLinkedListNode in the list of KThreadLocalPages
| |
− | |-
| |
− | | 0x64
| |
− | | KLinkedListNode*
| |
− | | Pointer to last KLinkedListNode in the list of KThreadLocalPages
| |
− | |-
| |
− | | 0x6C
| |
− | | s32
| |
− | | Ideal processor
| |
− | |-
| |
− | | 0x74
| |
− | | u32
| |
− | | Pointer to resource limits for process.
| |
− | |-
| |
− | | 0x79
| |
− | | u8
| |
− | | Proc affinity mask
| |
− | |-
| |
− | | 0x7C
| |
− | | u32
| |
− | | Number of threads which belong to this process.
| |
− | |-
| |
− | | 0x80
| |
− | | 0x10-bytes
| |
− | | SVC access control mask from the exheader kernel descriptors. This is copied to the [[Memory_layout#0xFF4XX000|0xFF4XX000]] area when creating threads, which is the actual data the SVC-handler checks for SVC-access-control.
| |
− | |-
| |
− | | 0x90
| |
− | | 0x10-bytes
| |
− | | Interrupt flags- 32 interrupts per word, 4 words, 0x80 interrupts total divided evenly across 4 words
| |
− | |-
| |
− | | 0xA0
| |
− | | u32
| |
− | | Kernel flags from the exheader kernel descriptors.
| |
− | |-
| |
− | | 0xA4
| |
− | | u16
| |
− | | Handle table size from the exheader kernel descriptors. When this is 0, handle table is stored in WRAM.
| |
− | |-
| |
− | | 0xA6
| |
− | | u16
| |
− | | Kernel release version field, from the exheader kernel descriptors.
| |
− | |-
| |
− | | 0xA8
| |
− | | u32
| |
− | | Pointer to [[KCodeSet]] instance
| |
− | |-
| |
− | | 0xAC
| |
− | | u32
| |
− | | Process id, this always begins at 0x0 for the first process.
| |
− | |-
| |
− | | 0xB0
| |
− | | u32
| |
− | | Kernel flags from the exheader kernel descriptors.
| |
− | |-
| |
− | | 0xB8
| |
− | | [[KThread]]*
| |
− | | Pointer to the process's main (?) thread.
| |
− | |-
| |
− | | 0xCC
| |
− | | KProcessHandleTable
| |
− | | Process handle table. until 0x1C4 or longer
| |
− | |-
| |
− | | 0x224
| |
− | | u32
| |
− | | ?
| |
− | |}
| |
| | | |
− | | + | The listed offsets are N3DS-only. |
− | Structure starting with [[8.0.0-18]] NATIVE_FIRM:
| |
− | | |
− | Size : 0x268 bytes
| |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 159: |
Line 14: |
| |- | | |- |
| | 0x0 | | | 0x0 |
− | | u32 | + | | void** |
− | | Pointer to vtable
| |
− | |-
| |
− | | 0x4
| |
− | | u32
| |
− | | Reference count
| |
− | |-
| |
− | | 0x8
| |
− | | u32
| |
− | | Count of KThreads that sync with this object - number of nodes in the linked list below
| |
− | |-
| |
− | | 0xC
| |
− | | KLinkedListNode*
| |
− | | Pointer to first KLinkedListNode in node list of KThreads that sync with this object
| |
− | |-
| |
− | | 0x10
| |
− | | KLinkedListNode*
| |
− | | Pointer to last KLinkedListNode in node list of KThreads that sync with this object
| |
− | |-
| |
− | | 0x1C
| |
− | | KThread*
| |
− | | Thread currently running kernel code to act on this process
| |
− | |-
| |
− | | 0x20
| |
− | | s16
| |
− | | This is used to record errors that occur when the thread above is set as the thread running code for the process
| |
− | |-
| |
− | | 0x22
| |
− | | u16
| |
− | | Unused, alignment
| |
− | |-
| |
− | | 0x24
| |
− | | u8
| |
− | | TLB entries for process need invalidating on core0
| |
− | |-
| |
− | | 0x28
| |
− | | u8
| |
− | | TLB entries for process need invalidating on core1
| |
− | |-
| |
− | | 0x2C
| |
− | | u32
| |
− | | Count of KMemoryBlocks owned by the process
| |
− | |-
| |
− | | 0x30
| |
− | | KLinkedListNode*
| |
− | | Pointer to first KLinkedListNode in list of KMemoryBlocks used by the process
| |
− | |-
| |
− | | 0x34
| |
− | | KLinkedListNode*
| |
− | | Pointer to last KLinkedListNode in list of KMemoryBlocks used by the process
| |
− | |-
| |
− | | 0x40
| |
− | | u32
| |
− | | Translation table base
| |
− | |-
| |
− | | 0x44
| |
− | | u8
| |
− | | Context ID
| |
− | |-
| |
− | | 0x46
| |
− | | bool
| |
− | | Process is the currently loaded game/app
| |
− | |-
| |
− | | 0x4C
| |
− | | u32
| |
− | | End of userland virtual memory for the process
| |
− | |-
| |
− | | 0x50
| |
− | | u32*
| |
− | | [[Memory_layout|LINEAR]] memory virtual address(userland) base for this process.
| |
− | |-
| |
− | | 0x58
| |
− | | u32
| |
− | | Size of the MMU table
| |
− | |-
| |
− | | 0x5C
| |
− | | u32
| |
− | | Virtual address of the MMU table for this process
| |
− | |-
| |
− | | 0x60
| |
− | | u32
| |
− | | Total size of all thread context pages (0xFF4xxxxx) owned by threads that belong to this process
| |
− | |-
| |
− | | 0x64
| |
− | | u32
| |
− | | Number of [[KThreadLocalPage|KThreadLocalPages]] used by this KProcess
| |
− | |-
| |
− | | 0x68
| |
− | | KLinkedListNode*
| |
− | | Pointer to first KLinkedListNode in the list of KThreadLocalPages
| |
− | |-
| |
− | | 0x6C
| |
− | | KLinkedListNode*
| |
− | | Pointer to last KLinkedListNode in the list of KThreadLocalPages
| |
− | |-
| |
− | | 0x74
| |
− | | s32
| |
− | | Ideal processor for this process
| |
− | |-
| |
− | | 0x78
| |
− | | KDebug*
| |
− | | KDebug object created from svc 60 to debug the process
| |
− | |-
| |
− | | 0x7C
| |
− | | KResourceLimit*
| |
− | | Pointer to resource limits for process.
| |
− | |-
| |
− | | 0x80
| |
− | | u8
| |
− | | Normally 1 to indicate process is open/available. Set to 2 to indicate process is exiting/closing and 3 to indicate exited/closed.
| |
− | |-
| |
− | | 0x81
| |
− | | u8
| |
− | | Process affinity mask
| |
− | |-
| |
− | | 0x82
| |
− | | u16
| |
− | | Unused, alignment
| |
− | |-
| |
− | | 0x84
| |
− | | s16
| |
− | | Number of threads which belong to this process.
| |
− | |-
| |
− | | 0x86
| |
− | | s16
| |
− | | Max number of threads which can belong to this process.
| |
− | |-
| |
− | | 0x88
| |
− | | 0x10-bytes
| |
− | | SVC access control mask from the exheader kernel descriptors. This is copied to the [[Memory_layout#0xFF4XX000|0xFF4XX000]] area when creating threads, which is the actual data the SVC-handler checks for SVC-access-control.
| |
− | |-
| |
− | | 0x98
| |
− | | u32[4]
| |
− | | Interrupt available flags- 32 interrupts per word, 4 words, 0x80 interrupts total divided evenly across 4 words
| |
− | |-
| |
− | | 0xA8
| |
− | | u32
| |
− | | Kernel flags from the exheader kernel descriptors.
| |
− | |-
| |
− | | 0xAC
| |
− | | u16
| |
− | | Handle table size from the exheader kernel descriptors. When this is 0, handle table is stored in WRAM.
| |
− | |-
| |
− | | 0xAE
| |
− | | u16
| |
− | | Kernel release version field, from the exheader kernel descriptors.
| |
− | |-
| |
− | | 0xB0
| |
− | | u32
| |
− | | Pointer to [[KCodeSet]] instance
| |
− | |-
| |
− | | 0xB4
| |
− | | u32
| |
− | | Process id, this always begins at 0x0 for the first process.
| |
− | |-
| |
− | | 0xB8
| |
− | | s64
| |
− | | Process creation time as tick count
| |
− | |-
| |
− | | 0xC0
| |
− | | KThread*
| |
− | | Pointer to the process's main thread.
| |
− | |-
| |
− | | 0xC4
| |
− | | u32[4]
| |
− | | Interrupt enabled flags- 32 interrupts per word, 4 words, 0x80 interrupts total divided evenly across 4 words
| |
− | |-
| |
− | | 0xD4
| |
− | | KProcessHandleTable
| |
− | | This is the data for tracking and using all of the KProcess's handles.
| |
− | |-
| |
− | | 0xEC
| |
− | | HandleDescriptor[0x28]
| |
− | | These internal HandleDescriptor entries are only used if the exheader's handle table size is 0
| |
− | |-
| |
− | | 0x22C
| |
− | | u32
| |
− | | Unused (From here up, everything is set to 0 on creation, has 0 written to it again during process creation, and is never used again.)
| |
− | |-
| |
− | | 0x230
| |
− | | u64
| |
− | | Unused
| |
− | |-
| |
− | | 0x238
| |
− | | u64
| |
− | | Unused
| |
− | |-
| |
− | | 0x240
| |
− | | u64
| |
− | | Unused
| |
− | |-
| |
− | | 0x248
| |
− | | u64
| |
− | | Unused
| |
− | |-
| |
− | | 0x250
| |
− | | u64
| |
− | | Unused
| |
− | |-
| |
− | | 0x258
| |
− | | u64
| |
− | | Unused
| |
− | |-
| |
− | | 0x260
| |
− | | u64
| |
− | | Unused
| |
− | |}
| |
− | | |
− | | |
− | Structure starting with [[8.1.0-0 New3DS]] NATIVE_FIRM:
| |
− | | |
− | Size : 0x270 bytes (0x4D8 bytes on ARM9)
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Type
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | u32
| |
| | Pointer to vtable | | | Pointer to vtable |
| |- | | |- |
Line 407: |
Line 42: |
| |- | | |- |
| | 0x1C | | | 0x1C |
− | | KThread*
| + | | [[KProcessHwInfo]] |
− | | Thread currently running code to act on this process
| + | | Process hardware/context info. Used to manage segmentation, etc. |
− | |-
| |
− | | 0x20
| |
− | | s16
| |
− | | This is used to record errors that occur when the thread above is set as the thread running code for the process
| |
− | |-
| |
− | | 0x22
| |
− | | u16
| |
− | | Unused, alignment
| |
− | |-
| |
− | | 0x24
| |
− | | u8
| |
− | | TLB entries for process need invalidating on core0
| |
− | |-
| |
− | | 0x28
| |
− | | u8
| |
− | | TLB entries for process need invalidating on core1
| |
− | |-
| |
− | | 0x2C
| |
− | | u8
| |
− | | TLB entries for process need invalidating on core2
| |
− | |-
| |
− | | 0x30
| |
− | | u8
| |
− | | TLB entries for process need invalidating on core3
| |
− | |-
| |
− | | 0x34
| |
− | | u32
| |
− | | Count of KMemoryBlocks owned by the process
| |
− | |-
| |
− | | 0x38
| |
− | | KLinkedListNode*
| |
− | | Pointer to first KLinkedListNode in list of KMemoryBlocks used by the process
| |
− | |-
| |
− | | 0x3C
| |
− | | KLinkedListNode*
| |
− | | Pointer to last KLinkedListNode in list of KMemoryBlocks used by the process
| |
− | |-
| |
− | | 0x40
| |
− | | u32
| |
− | | Unknown
| |
− | |-
| |
− | | 0x44
| |
− | | u32
| |
− | | Unknown
| |
− | |-
| |
− | | 0x48
| |
− | | u32
| |
− | | Translation table base
| |
− | |-
| |
− | | 0x4C
| |
− | | u8
| |
− | | Context ID
| |
− | |-
| |
− | | 0x4D
| |
− | | u8
| |
− | | Something to do with memory allocation
| |
− | |-
| |
− | | 0x4E
| |
− | | bool
| |
− | | Process is the currently loaded game/app
| |
− | |-
| |
− | | 0x50
| |
− | | u32
| |
− | | Unknown
| |
− | |-
| |
− | | 0x54
| |
− | | u32
| |
− | | End of userland virtual memory for the process
| |
− | |-
| |
− | | 0x58
| |
− | | u32*
| |
− | | [[Memory_layout|LINEAR]] memory virtual address(userland) base for this process. | |
− | |- | |
− | | 0x5C
| |
− | | u32
| |
− | | Unknown
| |
− | |-
| |
− | | 0x60
| |
− | | u32
| |
− | | Size of the MMU table
| |
− | |-
| |
− | | 0x64
| |
− | | u32
| |
− | | Virtual address of the MMU table for this process
| |
| |- | | |- |
| | 0x68 | | | 0x68 |
Line 528: |
Line 79: |
| | 0x88 | | | 0x88 |
| | u8 | | | u8 |
− | | Normally 1 to indicate process is open/available. Set to 2 to indicate process is exiting/closing and 3 to indicate exited/closed. | + | | Normally 1 to indicate process is open/available. Set to 2 to indicate process is exiting/closing and 3 to indicate exited/closed. |
| |- | | |- |
| | 0x89 | | | 0x89 |
Line 544: |
Line 95: |
| | 0x8E | | | 0x8E |
| | s16 | | | s16 |
− | | Max number of threads which can belong to this process. This is always 0. | + | | Max number of threads which can belong to this process. This is always 0. |
| |- | | |- |
| | 0x90 | | | 0x90 |
Line 589: |
Line 140: |
| | [[KProcess#KProcessHandleTable|KProcessHandleTable]] | | | [[KProcess#KProcessHandleTable|KProcessHandleTable]] |
| | This is the data for tracking and using all of the KProcess's handles. | | | This is the data for tracking and using all of the KProcess's handles. |
− | |-
| |
− | | 0xF4
| |
− | | HandleDescriptor[0x28]
| |
− | | These internal HandleDescriptor entries are only used if the exheader's handle table size is 0
| |
| |- | | |- |
| | 0x234 | | | 0x234 |