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