Changes

Jump to navigation Jump to search
7,530 bytes removed ,  19:37, 10 December 2016
no edit summary
Line 1: Line 1: −
[[Category:Kernel objects]]
+
[[Category:Kernel synchronization objects]]
class [[KProcess]] extends [[KSynchronizationObject]];
+
[[Category:Kernel interrupt events]]
 +
class [[KProcess]] extends [[KSynchronizationObject]] and [[KSendableInterruptEvent]];
   −
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"
+
The listed offsets are N3DS-only.
|-
  −
!  Offset
  −
! Type
  −
!  Description
  −
|-
  −
| 0x0
  −
| [[KSynchronizationObject]]
  −
| Base object
  −
|-
  −
| 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
  −
| [[KLinkedList]]
  −
| List of [[KThreadLocalPage|KThreadLocalPages]] objects used by this KProcess
  −
|-
  −
| 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
  −
| ?
  −
|}
  −
 
  −
 
  −
Structure starting with [[8.0.0-18]] NATIVE_FIRM:
  −
 
  −
Size : 0x268 bytes
      
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 127: Line 15:  
|-
 
|-
 
| 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 367: Line 35:  
|-
 
|-
 
| 0x14
 
| 0x14
| u32
+
| [[KSendableInterruptEvent]]
| Unknown
+
| Interrupt event (*this) sent to terminate the process
|-
  −
| 0x18
  −
| u32
  −
| Unknown
   
|-
 
|-
 
| 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 496: Line 76:  
| 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 512: Line 92:  
| 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 557: Line 137:  
| [[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
Line 629: Line 205:  
|-
 
|-
 
| 0x10
 
| 0x10
| KThread*
+
| [[KObjectMutex]]
| Thread currently running code acting on this object.
+
| Mutex
|-
  −
| 0x14
  −
| s16
  −
| Track errors for the running thread above.
  −
|-
  −
| 0x16
  −
| s16
  −
| Unused, alignment
   
|-
 
|-
 
| 0x18
 
| 0x18
Line 644: Line 212:  
| This small handle data table, internal to the KProcess, is only used in certain processes that don't have an external handle descriptor table in FCRAM.  It is all zeros in most processes.
 
| This small handle data table, internal to the KProcess, is only used in certain processes that don't have an external handle descriptor table in FCRAM.  It is all zeros in most processes.
 
|}
 
|}
      
= HandleDescriptor =
 
= HandleDescriptor =
516

edits

Navigation menu