Kernel: Difference between revisions
m Hexkyz moved page Kernel objects to Kernel: Use this page for general kernel documentation |
|||
(88 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
= KAutoObject = | = KAutoObject = | ||
Size: 0x10 | Size: 0x10 | ||
[5.0.0] Size: 0x20 | |||
[6.0.0] Size: 0x30 | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 8: | Line 12: | ||
| 0 || * || Vtable | | 0 || * || Vtable | ||
|- | |- | ||
| 8 || | | 8 || u32 || ReferenceCount | ||
|} | |||
[5.0.0]: | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Type || Description | |||
|- | |||
| 0 || * || Vtable | |||
|- | |||
| 8 || u32 || ReferenceCount | |||
|- | |||
| 0x10 || KLinkedListNode || Intrusive list, links to other instances of the same class (managed by a KObjectAllocator). | |||
|} | |||
[6.0.0]: | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Type || Description | |||
|- | |||
| 0 || * || Vtable | |||
|- | |||
| 8 || u32 || ReferenceCount | |||
|- | |||
| 0x10 || [[#KRedBlackTreeNode]] || Intrusive red-black tree node, replaces the Intrusive list node from previous versions. | |||
|} | |} | ||
= KSynchronizationObject = | = KSynchronizationObject = | ||
Size: 0x28 | Size: 0x28 | ||
[5.0.0] Size: 0x38 | |||
[6.0.0] Size: 0x48 | |||
Inherits from: [[#KAutoObject]] | Inherits from: [[#KAutoObject]] | ||
Line 22: | Line 54: | ||
| 0 || [[#KAutoObject]] || Inheritance | | 0 || [[#KAutoObject]] || Inheritance | ||
|- | |- | ||
| 0x10 || | | 0x10 || [[#KLinkedList]] || ThreadSyncList | ||
|} | |||
= KMutex = | |||
Size: 0x8 | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Type || Description | |||
|- | |- | ||
| | | 0 || u64 || OwnerTag | ||
|} | |} | ||
= KRecursiveLock = | = KRecursiveLock = | ||
Size: | Size: 0x18 | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 34: | Line 74: | ||
! Offset || Type || Description | ! Offset || Type || Description | ||
|- | |- | ||
| 0 || | | 0 || [[#KThread]] * || Owner | ||
|- | |||
| 8 || s32 || Count | |||
|} | |} | ||
= KLockedList = | = KLockedList = | ||
Size: 0x28 | Size: 0x28 | ||
[5.0.0]? Size: 0x20 | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 48: | Line 93: | ||
| 8 || [[#KLinkedListNode]] || List | | 8 || [[#KLinkedListNode]] || List | ||
|- | |- | ||
| 0x18 || [[# | | 0x18 || [[#KMutex]] || Mutex | ||
|- | |- | ||
| 0x20 || u64 || MaxCount | | 0x20 || u64 || MaxCount | ||
|} | |||
[5.0.0]?: | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Type || Description | |||
|- | |||
| 0 || [[#KLinkedListNode]] || List | |||
|- | |||
| 0x10 || [[#KMutex]] || Mutex | |||
|- | |||
| 0x18 || u64 || MaxCount | |||
|} | |} | ||
Line 63: | Line 121: | ||
|- | |- | ||
| 8 || [[#KLinkedListNode]]* || Next | | 8 || [[#KLinkedListNode]]* || Next | ||
|} | |||
= KLinkedListEntry = | |||
Size: 0x10 + <code>sizeof(T)</code> | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Type || Description | |||
|- | |||
| 0 || [[#KLinkedListNode]] || NodeFor__List | |||
|- | |||
| 0x10 || T || Data | |||
|} | |||
= KLinkedList = | |||
Size: 0x18 | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Type || Description | |||
|- | |||
| 0 || u64 || Count | |||
|- | |||
| 8 || [[#KLinkedListNode]] || Bounds (first, last) | |||
|} | |||
= KRedBlackTreeNode = | |||
Size: 0x20 | |||
Note: This is BSD sys/tree.h's RB_ENTRY(...). | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Type || Description | |||
|- | |||
| 0 || KRedBlackTreeNode* || Left Child | |||
|- | |||
| 8 || KRedBlackTreeNode* || Right Child | |||
|- | |||
| 0x10 || KRedBlackTreeNode* || Parent | |||
|- | |||
| 0x18 || int || Color | |||
|} | |||
= KRedBlackTree = | |||
Size: 0x8 | |||
Note: This is BSD sys/tree.h's RB_HEAD(..., KRedBlackTreeNode); | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Type || Description | |||
|- | |||
| 0 || KRedBlackTreeNode* || Root | |||
|- | |||
|} | |||
= KThread = | |||
[1.0.0] Size: 0x620 | |||
[5.0.0]? Size: 0x6C0 | |||
Inherits from: [[#KSynchronizationObject]], [[#KSchedulerObject0]], [[#KSchedulerObject1]], [[#KSchedulerObject2]] | |||
<div style="display: inline-block"> | |||
{| class="wikitable" border="1" | |||
|- | |||
! 1.0.0 Offset || Type || Description | |||
|- | |||
| 0 || [[#KSynchronizationObject]] || Inheritance | |||
|- | |||
| 0x28 || KSchedulerObject0 || Inheritance | |||
|- | |||
| 0x48 || KSchedulerObject1 || Inheritance | |||
|- | |||
| 0x58 || KSchedulerObject2 || Inheritance | |||
|- | |||
| 0x70 || KThreadContext || Context | |||
|- | |||
| 0x2F0 || u64 || CoreMask | |||
|- | |||
| 0x2F8 || u64 || CoreMaskOverride | |||
|- | |||
| 0x300 || u64 || ThreadId | |||
|- | |||
| 0x308 || u64 || TotalTimeRunning | |||
|- | |||
| 0x310 || [[#KSynchronizationObject]]* || SignalledObjectPtr | |||
|- | |||
| 0x318 || u64 || | |||
|- | |||
| 0x320 || u64 || CondVar_CondVarUserAddr | |||
|- | |||
| 0x328 || u64 || Entrypoint | |||
|- | |||
| 0x330 || u64 || CondVar_MutexUserAddr | |||
|- | |||
| 0x338 || [[#KProcess]]* || ProcessPtr | |||
|- | |||
| 0x340 || void* || KernelThreadStack | |||
|- | |||
| 0x348 || u64 || | |||
|- | |||
| 0x350 || void* || TlsKernelPtr | |||
|- | |||
| 0x358 || void* || TlsPhysicalPtr | |||
|- | |||
| 0x360 || [[#KSynchronizationObject]]*[0x40] || SyncObjects | |||
|- | |||
| 0x560 || [[#KThread]]* || CondVar_NextThreadPtr | |||
|- | |||
| 0x568 || [[#KThread]]* || CondVar_PrevThreadPtr | |||
|- | |||
| 0x570 || [[#KSynchronizationObject]]* || SignalledObjectPtr? | |||
|- | |||
| 0x578 || KLinkedListNode || | |||
|- | |||
| 0x588 || KLinkedListNode || | |||
|- | |||
| 0x598 || KLinkedListNode || NodeFor__ThreadList | |||
|- | |||
| 0x5A8 || KLinkedListNode || NodeFor__ThreadsOnSameCore | |||
|- | |||
| 0x5B8 || [[#KThread]]* || | |||
|- | |||
| 0x5C0 || [[#KThread]]* || CondVar_SelfPtr | |||
|- | |||
| 0x5C8 || u64 || | |||
|- | |||
| 0x5D0 || u64 || | |||
|- | |||
| 0x5D8 || u64 || | |||
|- | |||
| 0x5E0 || u32 || CondVar_WaitThreadHandle | |||
|- | |||
| 0x5E4 || u32 || SchedulingFlags_Default | |||
|- | |||
| 0x5E8 || u32 || WaitSync_RetVal | |||
|- | |||
| 0x5EC || u32 || | |||
|- | |||
| 0x5F0 || u32 || ActualPriority | |||
|- | |||
| 0x5F4 || u32 || | |||
|- | |||
| 0x5F8 || u32 || | |||
|- | |||
| 0x5FC || u32 || | |||
|- | |||
| 0x600 || u32 || WantedPriority | |||
|- | |||
| 0x604 || u32 || CpuCore | |||
|- | |||
| 0x608 || u8 || State | |||
|- | |||
| 0x609 || u8 || ShallBeTerminated | |||
|- | |||
| 0x60A || u8 || | |||
|- | |||
| 0x60B || u8 || | |||
|- | |||
| 0x60C || u8 || | |||
|- | |||
| 0x60D || u8 || | |||
|- | |||
| 0x60E || u8 || HasExited | |||
|- | |||
| 0x60F || u8 || HasCpuCoreOverride | |||
|- | |||
| ... || ... || ... | |||
|} | |} | ||
Line 69: | Line 296: | ||
[2.0.0] Size: 0x2480 | [2.0.0] Size: 0x2480 | ||
[3.0.0] Size: 0x2580 | |||
[5.0.0] Size: 0x4600 | |||
Inherits from: [[#KSynchronizationObject]] | Inherits from: [[#KSynchronizationObject]] | ||
Line 79: | Line 310: | ||
| 0 || [[#KSynchronizationObject]] || Inheritance | | 0 || [[#KSynchronizationObject]] || Inheritance | ||
|- | |- | ||
| 0x28 || || | | 0x28 || KProcessTerminationMessage || Sent to mailbox 0 when self-terminating. | ||
|- | |- | ||
| 0x38 || [[#KMemoryManager]] || MemoryManager | | 0x38 || [[#KMemoryManager]] || MemoryManager | ||
Line 85: | Line 316: | ||
| 0xF0 || u64 || TotalMemUsage | | 0xF0 || u64 || TotalMemUsage | ||
|- | |- | ||
| 0xF8 | | 0xF8 || [[#KLinkedList]]<[[#KTlsPageManager]]*>> || TlsPagesList | ||
|- | |- | ||
| 0x110 || s32 || DefaultCpuCore | | 0x110 || s32 || DefaultCpuCore | ||
|- | |- | ||
| 0x118 || KDebug* || Debug | | 0x118 || [[#KDebug]]* || Debug | ||
|- | |- | ||
| 0x120 || [[#KResourceLimit]]* || ResourceLimit | | 0x120 || [[#KResourceLimit]]* || ResourceLimit | ||
Line 97: | Line 326: | ||
| 0x128 || u32 || State | | 0x128 || u32 || State | ||
|- | |- | ||
| 0x130 || [[# | | 0x130 || [[#KMutex]] || ProcessMutex | ||
|- | |- | ||
| 0x138 || [[# | | 0x138 || [[#KMutex]] || ThreadingMutex | ||
|- | |- | ||
| 0x140 || [[#KLinkedListNode]]<[[#KThread]]> || ThreadArbiterList | | 0x140 || [[#KLinkedListNode]]<[[#KThread]] *> || ThreadArbiterList | ||
|- | |- | ||
| 0x150 || KLinkedListNode || | | 0x150 || KLinkedListNode || | ||
Line 113: | Line 342: | ||
| 0x182 || u8 || IsSystem | | 0x182 || u8 || IsSystem | ||
|- | |- | ||
| 0x183 || u8[12] || | | 0x183 || u8[12+1] || ProcessName | ||
|- | |- | ||
| 0x190 || u16 || NumberOfCreatedThreads | | 0x190 || u16 || NumberOfCreatedThreads | ||
Line 139: | Line 366: | ||
| 0x278 || u64 || MaxTotalMemUsage | | 0x278 || u64 || MaxTotalMemUsage | ||
|- | |- | ||
| 0x280 || u32 || | | 0x280 || u32 || ProcessCategory (0: regular title, 1: kernel built-in) | ||
|- | |- | ||
| 0x288 || [[#KProcessHandleTable]] || HandleTable | | 0x288 || [[#KProcessHandleTable]] || HandleTable | ||
Line 145: | Line 372: | ||
| 0x528 || void* || UsermodeExceptionTlsArea | | 0x528 || void* || UsermodeExceptionTlsArea | ||
|- | |- | ||
| 0x530 || [[#KLinkedListNode]]<[[#KThread]]> || ExceptionThreadList | | 0x530 || [[#KLinkedListNode]]<[[#KThread]] *> || ExceptionThreadList | ||
|- | |- | ||
| 0x540 || [[#KThread]]* || ExceptionThread | | 0x540 || [[#KThread]]* || ExceptionThread | ||
|- | |- | ||
| 0x548 || [[#KLinkedListNode]]<[[#KThread]]> || ThreadList | | 0x548 || [[#KLinkedListNode]]<[[#KThread]] *> || ThreadList | ||
|- | |- | ||
| 0x558 || | | 0x558 || bool || HasStarted | ||
|- | |- | ||
| 0x55C || u32 || | | 0x55C || u32 || UnusedZero | ||
|- | |- | ||
| 0x560 || u64[ | | 0x560 || u64[2] || UnusedZeroes | ||
|- | |- | ||
| | | 0x570 || u64 || TotalTimeRunning | ||
|- | |- | ||
| 0x5A8 || u64 || | | 0x578 || u64[5] || UnusedZeroes | ||
|- | |||
| 0x5A0 || u64 || UnusedZero | |||
|- | |||
| 0x5A8 || u64 || UnusedZero | |||
|} | |} | ||
</div> | </div> | ||
Line 170: | Line 401: | ||
| 0 || [[#KSynchronizationObject]] || Inheritance | | 0 || [[#KSynchronizationObject]] || Inheritance | ||
|- | |- | ||
| 0x28 || || | | 0x28 || KProcessTerminationMessage || Sent to mailbox 0 when self-terminating. | ||
|- | |- | ||
| 0x38 || [[#KMemoryManager]] || MemoryManager | | 0x38 || [[#KMemoryManager]] || MemoryManager | ||
Line 176: | Line 407: | ||
| 0x100 || u64 || TotalMemUsage | | 0x100 || u64 || TotalMemUsage | ||
|- | |- | ||
| 0x108 | | 0x108 || [[#KLinkedList]]<[[#KTlsPageManager]]*> || TlsPagesList | ||
|- | |- | ||
| 0x120 || s32 || DefaultCpuCore | | 0x120 || s32 || DefaultCpuCore | ||
|- | |- | ||
| 0x128 || KDebug* || Debug | | 0x128 || [[#KDebug]]* || Debug | ||
|- | |- | ||
| 0x130 || [[#KResourceLimit]]* || ResourceLimit | | 0x130 || [[#KResourceLimit]]* || ResourceLimit | ||
Line 188: | Line 417: | ||
| 0x138 || u32 || State | | 0x138 || u32 || State | ||
|- | |- | ||
| 0x140 || [[# | | 0x140 || [[#KMutex]] || ProcessMutex | ||
|- | |- | ||
| 0x148 || [[# | | 0x148 || [[#KMutex]] || ThreadingMutex | ||
|- | |- | ||
| 0x150 || [[#KLinkedListNode]]<[[#KThread]]> || ThreadArbiterList | | 0x150 || [[#KLinkedListNode]]<[[#KThread]] *> || ThreadArbiterList | ||
|- | |- | ||
| 0x160 || KLinkedListNode || | | 0x160 || KLinkedListNode || | ||
Line 204: | Line 433: | ||
| 0x192 || u8 || IsSystem | | 0x192 || u8 || IsSystem | ||
|- | |- | ||
| 0x193 || u8[12] || | | 0x193 || u8[12+1] || ProcessName | ||
|- | |- | ||
| 0x1A0 || u16 || NumberOfCreatedThreads | | 0x1A0 || u16 || NumberOfCreatedThreads | ||
Line 230: | Line 457: | ||
| 0x288 || u64 || MaxTotalMemUsage | | 0x288 || u64 || MaxTotalMemUsage | ||
|- | |- | ||
| 0x290 || u32 || | | 0x290 || u32 || ProcessCategory (0: regular title, 1: kernel built-in) | ||
|- | |- | ||
| | | 0x298 || u64[5] || Unused [?] | ||
|- | |- | ||
| 0x2C0 || [[#KProcessHandleTable]] || HandleTable | | 0x2C0 || [[#KProcessHandleTable]] || HandleTable | ||
Line 238: | Line 465: | ||
| 0x2380 || void* || UsermodeExceptionTlsArea | | 0x2380 || void* || UsermodeExceptionTlsArea | ||
|- | |- | ||
| 0x2388 || [[#KLinkedListNode]]<[[#KThread]]> || ExceptionThreadList | | 0x2388 || [[#KLinkedListNode]]<[[#KThread]] *> || ExceptionThreadList | ||
|- | |- | ||
| 0x2398 || [[#KThread]]* || ExceptionThread | | 0x2398 || [[#KThread]]* || ExceptionThread | ||
|- | |- | ||
| 0x23A0 || [[#KLinkedListNode]]<[[#KThread]]> || ThreadList | | 0x23A0 || [[#KLinkedListNode]]<[[#KThread]] *> || ThreadList | ||
|- | |||
| 0x23B0 || [[#KLinkedListNode]]<[[#KSharedMemoryRef]] *> || MappedSharedMemoriesList | |||
|- | |||
| 0x23C0 || bool || HasStarted | |||
|- | |||
| 0x23C1 || bool || HasException | |||
|- | |||
| 0x23C4 || u32 || ExceptionEnum0 | |||
|- | |||
| 0x23C8 || u64 || ExceptionEnum1 | |||
|- | |||
| 0x23D0 || u64 || ExceptionThreadUnkInfo0 | |||
|- | |||
| 0x23D8 || u64 || BreakArg0 | |||
|- | |||
| 0x23E0 || u64 || BreakArg1 | |||
|- | |||
| 0x23E8 || u64 || BreakArg2 | |||
|- | |||
| 0x23F0 || u64 || ExceptionThreadUnkInfo1 | |||
|- | |||
| 0x23F8 || u32 || UnusedZero | |||
|- | |||
| 0x2400 || u64[8] || UnusedZeroes | |||
|- | |||
| 0x2440 || u64 || UnusedZero | |||
|- | |||
| 0x2448 || u64 || UnusedZero | |||
|- | |||
| 0x2450 || u64[6] || Unused [?] | |||
|} | |} | ||
</div> | </div> | ||
== KTlsPageManager == | |||
Size: 0x20 | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Type | |||
! Description | |||
|- | |||
| 0 || void* || TlsPagePtr | |||
|- | |||
| 8 || [[#KProcess*]] || ProcessPtr | |||
|- | |||
| 0x10 || u32 || UsageCount | |||
|- | |||
| 0x14 || u8[8] || IsSlotFree | |||
|} | |||
== KProcessCapabilities == | == KProcessCapabilities == | ||
Line 327: | Line 602: | ||
[2.0.0] Size: 8 | [2.0.0] Size: 8 | ||
[5.0.0] Size: 0x10 | |||
<div style="display: inline-block"> | <div style="display: inline-block"> | ||
Line 351: | Line 628: | ||
|- | |- | ||
| 4 || u32 || ObjectCompressedPtr | | 4 || u32 || ObjectCompressedPtr | ||
|} | |||
</div> | |||
<div style="display: inline-block; vertical-align:top;"> | |||
{| class="wikitable" border="1" | |||
|- | |||
! 5.0.0 Offset || Type || Description | |||
|- | |||
| 0 || u16 || HandleId | |||
|- | |||
| 2 || u16 || ObjectType | |||
|- | |||
| 8 || [[#KAutoObject]]* || object | |||
|} | |} | ||
</div> | </div> | ||
Line 378: | Line 668: | ||
|} | |} | ||
</div> | </div> | ||
== KSharedMemoryRef == | |||
[2.0.0] Size: 0x40 | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Type || Description | |||
|- | |||
| 0 || [[#KLinkedListNode]]<[[#KSharedMemoryRef]] *> || NodeFor__MappedSharedMemoriesList | |||
|- | |||
| 0x10 || [[#KSharedMemory*]] || SharedMem | |||
|- | |||
| 0x18 || u64 || InitiallyZero | |||
|} | |||
= KMemoryManager = | = KMemoryManager = | ||
Line 383: | Line 687: | ||
[2.0.0] Size: 0xC8 | [2.0.0] Size: 0xC8 | ||
[5.0.0] Size: 0xF8? | |||
<div style="display: inline-block"> | <div style="display: inline-block"> | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Offset | ! 1.0.0 Offset | ||
! Type | ! Type | ||
! Description | ! Description | ||
Line 405: | Line 711: | ||
| 0x30 || u64 || MapRegionBaseAddr | | 0x30 || u64 || MapRegionBaseAddr | ||
|- | |- | ||
| 0x38 || u64 || | | 0x38 || u64 || MapRegionEndAddr | ||
|- | |- | ||
| 0x40 || u64 || HeapMaxAllocation | | 0x40 || u64 || HeapMaxAllocation | ||
|- | |- | ||
| 0x48 || [[# | | 0x48 || [[#KMutex]] || Mutex | ||
|- | |- | ||
| 0x50 || [[#KPageTable]] || PageTable | | 0x50 || [[#KPageTable]] || PageTable | ||
Line 446: | Line 752: | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Offset | ! 2.0.0 Offset | ||
! Type | ! Type | ||
! Description | ! Description | ||
Line 460: | Line 766: | ||
| 0x20 || u64 || HeapRegionEndAddr | | 0x20 || u64 || HeapRegionEndAddr | ||
|- | |- | ||
| 0x28 || u64 || | | 0x28 || u64 || HeapCurAddr | ||
|- | |- | ||
| 0x30 || u64 || | | 0x30 || u64 || MapRegionBaseAddr | ||
|- | |- | ||
| 0x38 || u64 || | | 0x38 || u64 || MapRegionEndAddr | ||
|- | |- | ||
| 0x40 || u64 || | | 0x40 || u64 || NewMapRegionBaseAddr | ||
|- | |- | ||
| 0x48 || u64 || | | 0x48 || u64 || NewMapRegionEndAddr | ||
|- | |- | ||
| 0x50 || u64 || | | 0x50 || u64 || TlsIoRegionBaseAddr | ||
|- | |- | ||
| 0x58 || u64 || | | 0x58 || u64 || TlsIoRegionEndAddr | ||
|- | |- | ||
| 0x60 || u64 || | | 0x60 || u64 || HeapMaxAllocation | ||
|- | |- | ||
| 0x68 || [[# | | 0x68 || [[#KMutex]] || Mutex | ||
|- | |- | ||
| 0x70 || [[#KPageTable]] || PageTable | | 0x70 || [[#KPageTable]] || PageTable | ||
Line 490: | Line 796: | ||
| 0x9E || bool || HasAslr | | 0x9E || bool || HasAslr | ||
|- | |- | ||
| 0xA0 || u32 || | | 0xA0 || u32 || PoolPartition | ||
|- | |- | ||
| 0xA4 || u32 || Is_0x5A_If_Cfg12_Bit0_ElseZero | | 0xA4 || u32 || Is_0x5A_If_Cfg12_Bit0_ElseZero | ||
Line 500: | Line 806: | ||
| 0xB0 || u64 || TranslationTableBaseRegister0 | | 0xB0 || u64 || TranslationTableBaseRegister0 | ||
|- | |- | ||
| 0xB8 || u64 || | | 0xB8 || u64 || TranslationControlRegister | ||
|- | |- | ||
| 0xC0 || u32 || AsidTagValue | | 0xC0 || u32 || AsidTagValue | ||
|} | |||
</div> | |||
<div style="display: inline-block; vertical-align:top;"> | |||
{| class="wikitable" border="1" | |||
|- | |||
! 5.0.0 Offset | |||
! Type | |||
! Description | |||
|- | |||
| 0 || * || Vtable | |||
|- | |||
| 8 || u64 || AddrSpaceMinAddr | |||
|- | |||
| 0x10 || u64 || AddrSpaceMaxAddr | |||
|- | |||
| 0x18 || u64 || HeapRegionBaseAddr | |||
|- | |||
| 0x20 || u64 || HeapRegionEndAddr | |||
|- | |||
| 0x28 || u64 || HeapCurAddr | |||
|- | |||
| 0x30 || u64 || MapRegionBaseAddr | |||
|- | |||
| 0x38 || u64 || MapRegionEndAddr | |||
|- | |||
| 0x40 || u64 || NewMapRegionBaseAddr | |||
|- | |||
| 0x48 || u64 || NewMapRegionEndAddr | |||
|- | |||
| 0x50 || u64 || TlsIoRegionBaseAddr | |||
|- | |||
| 0x58 || u64 || TlsIoRegionEndAddr | |||
|- | |||
| 0x60 || u64 || HeapMaxAllocation | |||
|- | |||
| 0x68 || || | |||
|- | |||
| 0x70 || || | |||
|- | |||
| 0x78 || [[#KMutex]] || Mutex | |||
|- | |||
| 0x80 || [[#KPageTable]] || PageTable | |||
|- | |||
| 0x90 || [[#KMemoryBlockManager]] || MemoryBlockManager | |||
|- | |||
| 0xA8 || u32 || ? | |||
|- | |||
| 0xAC || u32 || AddressSpaceWidth (32/36/39) | |||
|- | |||
| 0xB0 || [[#KLinkedList]]? || | |||
|- | |||
| 0xC8 || || | |||
|- | |||
| 0xD0 || || | |||
|- | |||
| 0xD8 || ptr || | |||
|- | |||
| 0xE0 || u64 || TranslationTableBaseRegister0 val | |||
|- | |||
| 0xE8 || u64 || TranslationControlRegister val | |||
|- | |||
| 0xF0 || u32 || AsidTagValue | |||
|} | |} | ||
</div> | </div> | ||
Line 547: | Line 916: | ||
! Description | ! Description | ||
|- | |- | ||
| 0 || [[#KLinkedListNode]]<[[#KMemoryBlock]]> || NodeFor__MemoryBlockList | | 0 || [[#KLinkedListNode]]<[[#KMemoryBlock]] *> || NodeFor__MemoryBlockList | ||
|- | |- | ||
| 0x10 || || | | 0x10 || || | ||
Line 615: | Line 984: | ||
| 0x30 || u64 || BaseAddress | | 0x30 || u64 || BaseAddress | ||
|- | |- | ||
| 0x38 || | | 0x38 || KMutex || Mutex | ||
|- | |- | ||
| 0x40 || int || Permission | | 0x40 || int || Permission | ||
Line 625: | Line 994: | ||
= KSharedMemory = | = KSharedMemory = | ||
Size: 0x40 | [1.0.0] Size: 0x40 | ||
[2.0.0] Size: 0x48 | |||
Inherits from: [[#KAutoObject]] | Inherits from: [[#KAutoObject]] | ||
<div style="display: inline-block;"> | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Offset | ! 1.0.0 Offset || Type || Description | ||
|- | |- | ||
| 0 || [[#KAutoObject]] || Inheritance | | 0 || [[#KAutoObject]] || Inheritance | ||
Line 646: | Line 1,016: | ||
|- | |- | ||
| 0x38 || bool || HasInited | | 0x38 || bool || HasInited | ||
|} | |||
</div> | |||
<div style="display: inline-block; vertical-align:top;"> | |||
{| class="wikitable" border="1" | |||
|- | |||
! 2.0.0 Offset || Type || Description | |||
|- | |||
| 0 || [[#KAutoObject]] || Inheritance | |||
|- | |||
| 0x10 || KMemoryBlockList || Blocks | |||
|- | |||
| 0x28 || [[#KResourceLimit]]* || OwnerResourceLimit | |||
|- | |||
| 0x30 || u64 || OwnerProcessPid | |||
|- | |||
| 0x38 || int || LocalPermission | |||
|- | |||
| 0x3C || int || RemotePermission | |||
|- | |||
| 0x40 || bool || HasInited | |||
|} | |||
</div> | |||
= KJitMemory = | |||
[4.0.0+] Size: 0x58 | |||
Inherits from: [[#KAutoObject]] | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Type || Description | |||
|- | |||
| 0 || [[#KAutoObject]] || Inheritance | |||
|- | |||
| 0x20 || KMemoryBlockList || Blocks | |||
|- | |||
| 0x38 || [[#KProcess]]* || SrcProcessPtr | |||
|- | |||
| 0x40 || u64 || SrcAddr | |||
|- | |||
| 0x48 || [[#KMutex]] || Mutex | |||
|- | |||
| 0x50 || u8 || HasInit | |||
|- | |||
| 0x51 || u8 || HasMappedSlave | |||
|- | |||
| 0x52 || u8 || HasMappedMaster | |||
|} | |} | ||
= KPort = | = KPort = | ||
Size: 0xA8 | [1.0.0] Size: 0xA8 | ||
[7.0.0] Size: 0x110 | |||
Inherits from: [[#KAutoObject]] | Inherits from: [[#KAutoObject]] | ||
<div style="display: inline-block;"> | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Offset | ! 1.0.0 Offset | ||
! Type | ! Type | ||
! Description | ! Description | ||
Line 671: | Line 1,094: | ||
| 0xA1 || bool || IsLight | | 0xA1 || bool || IsLight | ||
|} | |} | ||
</div> | |||
<div style="display: inline-block; vertical-align:top;"> | |||
{| class="wikitable" border="1" | |||
|- | |||
! 7.0.0 Offset | |||
! Type | |||
! Description | |||
|- | |||
| 0 || [[#KAutoObject]] || Inheritance | |||
|- | |||
| 0x30 || [[#KServerPort]] || ServerSide | |||
|- | |||
| 0xA0 || [[#KClientPort]] || ClientSide | |||
|- | |||
| 0xF8 || u64 || | |||
|- | |||
| 0x100 || char* || NamePtr | |||
|- | |||
| 0x108 || bool || HasInited | |||
|- | |||
| 0x109 || bool || IsLight | |||
|} | |||
</div> | |||
== KServerPort == | == KServerPort == | ||
Line 739: | Line 1,186: | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Offset | ! Offset || Type || Description | ||
|- | |- | ||
| 0 || [[#KSynchronizationObject]] || Inheritance | | 0 || [[#KSynchronizationObject]] || Inheritance | ||
Line 747: | Line 1,192: | ||
| 0x28 || KLinkedListNode || NodeFor__IncomingConnections | | 0x28 || KLinkedListNode || NodeFor__IncomingConnections | ||
|- | |- | ||
| 0x38 || || | | 0x38 || [[#KSession*]] || Parent | ||
|- | |- | ||
| 0x40 || KLinkedListNode || | | 0x40 || KLinkedListNode<[[#KSessionRequest]]*> || RequestList | ||
|- | |- | ||
| 0x50 || || | | 0x50 || [[#KSessionRequest]]* || ActiveRequest | ||
|- | |||
| 0x58 || [[#KMutex]] || lock | |||
|} | |||
=== KSessionRequest === | |||
Size: 0x158 | |||
Inherits from: [[#KAutoObject]] | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Type || Description | |||
|- | |||
| 0 || [[#KAutoObject]] || Inheritance | |||
|- | |||
| 0x10 || KLinkedListNode || NodeFor__RequestList | |||
|- | |||
| 0x20 || [[#KBufferDescriptor]][8] || BufferTable | |||
|- | |||
| 0x120 || [[#KBufferDescriptor]]* || ExternalBufferTable | |||
|- | |||
| 0x128 || u8 || NumSendBuffers | |||
|- | |||
| 0x129 || u8 || NumRecvBuffers | |||
|- | |||
| 0x12A || u8 || NumExchBuffers | |||
|- | |||
| 0x130 || [[#KThread]]* || SenderThread | |||
|- | |||
| 0x138 || u64 || InitiallyZero | |||
|- | |||
| 0x140 || [[#KWritableEvent]]* || ForAsyncEvent | |||
|- | |||
| 0x148 || u64 || CustomCmdbufAddr | |||
|- | |||
| 0x150 || u64 || CustomCmdbufSize | |||
|} | |||
=== KBufferDescriptor === | |||
Size: 0x20 | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Type || Description | |||
|- | |||
| 0 || u64 || UserVirtAddr | |||
|- | |||
| 8 || u64 || Size | |||
|- | |||
| 0x10 || u64 || | |||
|- | |||
| 0x18 || u64 || BufferMemoryState | |||
|- | |- | ||
|} | |} | ||
Line 901: | Line 1,397: | ||
== KInterruptEvent == | == KInterruptEvent == | ||
Size: 0x50 | [1.0.0] Size: 0x50 | ||
[2.0.0] Size: 0x48 | |||
Inherits from: [[#KReadableEvent]] | Inherits from: [[#KReadableEvent]] | ||
<div style="display: inline-block;"> | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Offset | ! 1.0.0 Offset || Type || Description | ||
|- | |- | ||
| 0 || [[#KReadableEvent]] || Inheritance | | 0 || [[#KReadableEvent]] || Inheritance | ||
|- | |- | ||
| 0x38 || || | | 0x38 || [[#KInterruptReceiver]] || Receiver | ||
|- | |- | ||
| 0x48 || u32 || IrqId (or -1) | | 0x48 || u32 || IrqId (or -1) | ||
|} | |} | ||
</div> | |||
<div style="display: inline-block; vertical-align:top;"> | |||
{| class="wikitable" border="1" | |||
|- | |||
! 2.0.0 Offset || Type || Description | |||
|- | |||
| 0 || [[#KReadableEvent]] || Inheritance | |||
|- | |||
| 0x38 || [[#KInterruptReceiver]]* || Receiver | |||
|- | |||
| 0x40 || u32 || IrqId (or -1) | |||
|- | |||
| 0x44 || bool || IsIrqRegistered | |||
|} | |||
</div> | |||
=== KInterruptReceiver === | |||
[1.0.0] Size: 0x10 | |||
[2.0.0] Size: 0x20 | |||
<div style="display: inline-block;"> | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Type || Description | |||
|- | |||
| 0 || * || Vtable | |||
|- | |||
| 8 || u64 || | |||
|} | |||
</div> | |||
<div style="display: inline-block; vertical-align:top;"> | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Type || Description | |||
|- | |||
| 0 || * || Vtable | |||
|- | |||
| 8 || u64 || InitiallyZero | |||
|- | |||
| 0x10 || [[#KInterruptEvent]]* || IrqEventPtr | |||
|- | |||
| 0x18 || s32 || IrqId | |||
|} | |||
</div> | |||
= KDeviceAddressSpace = | = KDeviceAddressSpace = | ||
Line 931: | Line 1,474: | ||
| 0 || [[#KAutoObject]] || Inheritance | | 0 || [[#KAutoObject]] || Inheritance | ||
|- | |- | ||
| 0x10 || [[# | | 0x10 || [[#KMutex]] || Mutex | ||
|- | |- | ||
| 0x18 || [[#KSmmuManager]] || Manager | | 0x18 || [[#KSmmuManager]] || Manager | ||
Line 985: | Line 1,528: | ||
| 0x38 || u64[5] || LimitValue | | 0x38 || u64[5] || LimitValue | ||
|- | |- | ||
| 0x60 || [[# | | 0x60 || [[#KMutex]] || Mutex | ||
|} | |} | ||
= KPoolManager = | = KPoolManager = | ||
Size: 0x380 | [1.0.0] Size: 0x380 | ||
[2.0.0] Size: 0x450 | |||
<div style="display: inline-block;"> | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Offset || Type || Description | ! 1.0.0 Offset || Type || Description | ||
|- | |- | ||
| 0 || [[#KPoolAllocator]][3] || Allocator | | 0 || [[#KPoolAllocator]][3] || Allocator | ||
Line 1,003: | Line 1,549: | ||
| 0x370 || u64 || | | 0x370 || u64 || | ||
|- | |- | ||
| 0x378 || [[# | | 0x378 || [[#KMutex]] || Mutex | ||
|} | |||
</div> | |||
<div style="display: inline-block; vertical-align:top;"> | |||
{| class="wikitable" border="1" | |||
|- | |||
! 2.0.0 Offset || Type || Description | |||
|- | |||
| 0 || [[#KPoolAllocator]] || Allocator0 | |||
|- | |||
| 0x220 || [[#KPartitionInfo]]* || PartitionInfo0 | |||
|- | |||
| 0x228 || [[#KPoolAllocator]] || Allocator1 | |||
|- | |||
| 0x448 || [[#KPartitionInfo]]* || PartitionInfo1 | |||
|} | |} | ||
</div> | |||
== KPoolAllocator == | == KPoolAllocator == | ||
Size: 0x118 | [1.0.0] Size: 0x118 | ||
[2.0.0] Size: 0x220 | |||
<div style="display: inline-block;"> | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Offset || Type || Description | ! 1.0.0 Offset || Type || Description | ||
|- | |- | ||
| 0 || void* || MemoryBase | | 0 || void* || MemoryBase | ||
Line 1,021: | Line 1,586: | ||
| 0x18 || [[#KPool]][8] || Pools | | 0x18 || [[#KPool]][8] || Pools | ||
|} | |} | ||
</div> | |||
<div style="display: inline-block; vertical-align:top;"> | |||
{| class="wikitable" border="1" | |||
|- | |||
! 2.0.0 Offset || Type || Description | |||
|- | |||
| 0 || void* || MemoryBase | |||
|- | |||
| 8 || u64 || MemorySize | |||
|- | |||
| 0x10 || [[#KPool]][8] || Pools | |||
|- | |||
| 0x210 || s32 || NumPools | |||
|} | |||
</div> | |||
=== KPool === | === KPool === | ||
Size: 0x20 | [1.0.0] Size: 0x20 | ||
[2.0.0] Size: 0x40 | |||
<div style="display: inline-block;"> | |||
{| class="wikitable" border="1" | |||
|- | |||
! 1.0.0 Offset || Type || Description | |||
|- | |||
| 0 || KPoolHeader* || FirstFreeChunk | |||
|- | |||
| 8 || u64 || | |||
|- | |||
| 0x10 || u64 || | |||
|- | |||
| 0x18 || void* || SingletonTableEntryPtr | |||
|} | |||
</div> | |||
<div style="display: inline-block; vertical-align:top;"> | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Offset || Type || Description | ! 2.0.0 Offset || Type || Description | ||
|- | |- | ||
| 0 || KPoolHeader* || FirstFreeChunk | | 0 || KPoolHeader* || FirstFreeChunk | ||
Line 1,036: | Line 1,635: | ||
|- | |- | ||
| 0x18 || void* || SingletonTableEntryPtr | | 0x18 || void* || SingletonTableEntryPtr | ||
|- | |||
| 0x20 || [[#KPool]]* || Parent | |||
|- | |||
| 0x30 || u64[2] || DmaProtectionKey | |||
|} | |} | ||
</div> | |||
== KPoolRefManager == | == KPoolRefManager == | ||
Size: 0x20 | [1.0.0] Size: 0x20 | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 1,052: | Line 1,656: | ||
|- | |- | ||
| 0x18 || u16* || RefCountTable | | 0x18 || u16* || RefCountTable | ||
|} | |||
= KObjectAllocator = | |||
Size: 0x50 | |||
[5.0.0]? Size: 0x48 | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Type || Description | |||
|- | |||
| 0 || [[#KLockedList]] || LockedList | |||
|- | |||
| 0x28 || [[#KSlabHeap]] || SlabHeap | |||
|} | |||
= KSlabHeap = | |||
Size: 0x28 | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Type || Description | |||
|- | |||
| 0 || void* || FreeListHead | |||
|- | |||
| 0x8 || u64 || | |||
|- | |||
| 0x10 || void* || HeapPtr | |||
|- | |||
| 0x18 || u64 || TotalHeapSize | |||
|- | |||
| 0x20 || u64 || SingleObjectSize | |||
|} | |||
5.0.0 (?): | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Type || Description | |||
|- | |||
| 0 || void* || FreeListHead | |||
|- | |||
| 0x8 || u64 || SingleObjectSize | |||
|- | |||
| 0x10 || void* || HeapPtr | |||
|- | |||
| 0x18 || void* || Start (equal to HeapPtr on init) | |||
|- | |||
| 0x20 || void* || End | |||
|} | |||
= KPageTableAllocator = | |||
Size: 0x30 | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Type || Description | |||
|- | |||
| 0 || u64 || | |||
|- | |||
| 0x10 || u16* || RefCountTable | |||
|- | |||
| 0x10 || void* || BaseAddress | |||
|- | |||
| 0x18 || u64 || Size | |||
|- | |||
| 0x20 || u64 || | |||
|- | |||
| 0x28 || u64 || | |||
|} | |||
= KIrqManager = | |||
[1.0.0] Size: 0x1608 | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Type || Description | |||
|- | |||
| 0 || [[#KIrqEntry]][32] || Core0Irq | |||
|- | |||
| 0x200 || [[#KIrqEntry]][32] || Core1Irq | |||
|- | |||
| 0x400 || [[#KIrqEntry]][32] || Core2Irq | |||
|- | |||
| 0x600 || [[#KIrqEntry]][32] || Core3Irq | |||
|- | |||
| 0x800 || [[#KIrqEntry]][224] || SharedIrqs | |||
|- | |||
| 0x1600 || [[#KMutex]] || Mutex | |||
|} | |||
== KIrqEntry == | |||
[1.0.0] Size: 0x10 | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Type || Description | |||
|- | |||
| 0 || [[#KInterruptReceiver]]* || Receiver | |||
|- | |||
| 8 || u8 || State0 | |||
|- | |||
| 9 || u8 || State1 | |||
|} | |||
= KDebug = | |||
Size: 0x50 | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Type || Description | |||
|- | |||
| 0 || [[#KSynchronizationObject]] || Inheritance | |||
|- | |||
| 0x28 || [[#KLinkedListNode]]<[[#KDebugEvent]]> || EventList | |||
|- | |||
| 0x38 || u32 || Flags | |||
|- | |||
| 0x40 || [[#KProcess]]* || ProcessPtr | |||
|- | |||
| 0x48 || [[#KMutex]] || Mutex | |||
|} | |||
== KDebugEvent == | |||
Size: 0x60 | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Type || Description | |||
|- | |||
| 0 || [[#KLinkedListNode]]<[[#KDebugEvent]] *> || NodeFor__EventList | |||
|- | |||
| 0x10 || u32 || EventType | |||
|- | |||
| 0x14 || u32 || ThreadId | |||
|- | |||
| 0x18 || u32 || Flags | |||
|- | |||
| 0x1C || u16 || | |||
|- | |||
| 0x1E || bool || | |||
|- | |||
| 0x20 || ... || ... | |||
|} | |||
= KManagedPort = | |||
Size: 0x28 | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Type || Description | |||
|- | |||
| 0 || [[#KLinkedListNode]]<[[#KManagedPort]] *> || NodeFor__ManagedPortList | |||
|- | |||
| 0x10 || char[12] || PortName | |||
|- | |||
| 0x20 || [[#KClientPort]]* || ClientPort | |||
|} | |||
= Slab Information = | |||
The Horizon/NX kernel keeps all objects in slab allocators, that can allocate a fixed amount of each. Attempting to allocate an object when the slab heap is full will result in an error 0xCE01 (Resource Exhaustion). | |||
{| class="wikitable" border="1" | |||
|- | |||
! Object || Slab Count | |||
|- | |||
| KEvent || 600 | |||
|- | |||
| KInterruptEvent || 100 | |||
|- | |||
| KProcess || 80 | |||
|- | |||
| KThread || 700 | |||
|- | |||
| KPort || 200 | |||
|- | |||
| KSharedMemory || 80 | |||
|- | |||
| KTransferMemory || 200 | |||
|- | |||
| KDeviceAddressSpace || 300 | |||
|- | |||
| KDebug || 4 | |||
|- | |||
| KSession || 800 | |||
|- | |||
| KLightSession || 100 | |||
|- | |||
| KLinkedListEntry<void*> || 17 231 | |||
|- | |||
| KLinkedListNode || 4 000 | |||
|- | |||
| KMemoryBlock (System) || 20 000 | |||
|- | |||
| KMemoryBlock (Other) || 10 000 | |||
|- | |||
| KTlsPageManager || 167 | |||
|- | |||
| KManagedPort || 7 | |||
|- | |||
| KDebugEvent || 704 | |||
|- | |||
| KSessionRequest || 1 600 | |||
|- | |||
| KResourceLimit || 5 | |||
|} | |} |