Changes

8,099 bytes removed ,  01:11, 25 November 2016
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