KProcess: Difference between revisions

Bond697 (talk | contribs)
No edit summary
No edit summary
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