Difference between revisions of "Kernel"
(→KPort) |
m (Hexkyz moved page Kernel objects to Kernel: Use this page for general kernel documentation) |
||
(113 intermediate revisions by 5 users not shown) | |||
Line 2: | Line 2: | ||
Size: 0x10 | Size: 0x10 | ||
+ | [5.0.0] Size: 0x20 | ||
+ | |||
+ | [6.0.0] Size: 0x30 | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset || Type || Description | ||
+ | |- | ||
+ | | 0 || * || Vtable | ||
+ | |- | ||
+ | | 8 || u32 || ReferenceCount | ||
+ | |} | ||
+ | |||
+ | [5.0.0]: | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 8: | Line 22: | ||
| 0 || * || Vtable | | 0 || * || Vtable | ||
|- | |- | ||
− | | 8 || | + | | 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 20: | Line 52: | ||
! Offset || Type || Description | ! Offset || Type || Description | ||
|- | |- | ||
− | | 0 || [[#KAutoObject]] || | + | | 0 || [[#KAutoObject]] || Inheritance |
+ | |- | ||
+ | | 0x10 || [[#KLinkedList]] || ThreadSyncList | ||
+ | |} | ||
+ | |||
+ | = KMutex = | ||
+ | Size: 0x8 | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset || Type || Description | ||
+ | |- | ||
+ | | 0 || u64 || OwnerTag | ||
+ | |} | ||
+ | |||
+ | = KRecursiveLock = | ||
+ | Size: 0x18 | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset || Type || Description | ||
+ | |- | ||
+ | | 0 || [[#KThread]] * || Owner | ||
+ | |- | ||
+ | | 8 || s32 || Count | ||
+ | |} | ||
+ | |||
+ | |||
+ | = KLockedList = | ||
+ | Size: 0x28 | ||
+ | |||
+ | [5.0.0]? Size: 0x20 | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset || Type || Description | ||
+ | |- | ||
+ | | 0 || u64 || Count | ||
|- | |- | ||
− | | | + | | 8 || [[#KLinkedListNode]] || List |
|- | |- | ||
− | | 0x18 || [[#KLinkedListNode]] || | + | | 0x18 || [[#KMutex]] || Mutex |
+ | |- | ||
+ | | 0x20 || u64 || MaxCount | ||
+ | |} | ||
+ | |||
+ | [5.0.0]?: | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset || Type || Description | ||
+ | |- | ||
+ | | 0 || [[#KLinkedListNode]] || List | ||
+ | |- | ||
+ | | 0x10 || [[#KMutex]] || Mutex | ||
+ | |- | ||
+ | | 0x18 || u64 || MaxCount | ||
|} | |} | ||
Line 37: | 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 | ||
+ | |- | ||
+ | | ... || ... || ... | ||
|} | |} | ||
= KProcess = | = KProcess = | ||
− | Size: 0x5B0 | + | [1.0.0] Size: 0x5B0 |
+ | |||
+ | [2.0.0] Size: 0x2480 | ||
+ | |||
+ | [3.0.0] Size: 0x2580 | ||
+ | |||
+ | [5.0.0] Size: 0x4600 | ||
Inherits from: [[#KSynchronizationObject]] | Inherits from: [[#KSynchronizationObject]] | ||
+ | <div style="display: inline-block"> | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
− | ! Offset | + | ! 1.0.0 Offset || Type || Description |
− | |||
− | |||
|- | |- | ||
− | | 0 | + | | 0 || [[#KSynchronizationObject]] || Inheritance |
− | | [[#KSynchronizationObject]] | ||
− | | | ||
|- | |- | ||
− | | 0x28 | + | | 0x28 || KProcessTerminationMessage || Sent to mailbox 0 when self-terminating. |
− | | | ||
− | | | ||
|- | |- | ||
− | | 0x38 | + | | 0x38 || [[#KMemoryManager]] || MemoryManager |
− | | [[# | ||
− | | MemoryManager | ||
|- | |- | ||
− | | 0xF0 | + | | 0xF0 || u64 || TotalMemUsage |
− | | u64 | ||
− | | TotalMemUsage | ||
|- | |- | ||
− | | 0xF8 | + | | 0xF8 || [[#KLinkedList]]<[[#KTlsPageManager]]*>> || TlsPagesList |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x110 || s32 || DefaultCpuCore |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x118 || [[#KDebug]]* || Debug |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x120 || [[#KResourceLimit]]* || ResourceLimit |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x128 || u32 || State |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x130 || [[#KMutex]] || ProcessMutex |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x138 || [[#KMutex]] || ThreadingMutex |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x140 || [[#KLinkedListNode]]<[[#KThread]] *> || ThreadArbiterList |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x150 || KLinkedListNode || |
− | | KLinkedListNode | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x160 || u64[4] || RandomEntropy |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x180 || u8 || HasStateChanged |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x181 || u8 || HasInitialized |
− | | u8 | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x182 || u8 || IsSystem |
− | | u8 | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x183 || u8[12+1] || ProcessName |
− | | u8 | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x190 || u16 || NumberOfCreatedThreads |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x192 || u16 || ThreadingRelatedInitiallyZero |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x194 || u32 || ProcessFlags |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x198 || [[#KProcessCapabilities]] || Capabilities |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x248 || u64 || TitleId |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x250 || u64 || ProcessId |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x258 || u64 || CreatedTickstamp |
− | | u64 | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x260 || u64 || Entrypoint |
− | | u64 | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x268 || u64 || CodeMemUsage |
− | | u64 | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x270 || u64 || DynamicMemUsage |
− | | u64 | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x278 || u64 || MaxTotalMemUsage |
− | | u64 | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x280 || u32 || ProcessCategory (0: regular title, 1: kernel built-in) |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x288 || [[#KProcessHandleTable]] || HandleTable |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x528 || void* || UsermodeExceptionTlsArea |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x530 || [[#KLinkedListNode]]<[[#KThread]] *> || ExceptionThreadList |
− | | [[# | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x540 || [[#KThread]]* || ExceptionThread |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x548 || [[#KLinkedListNode]]<[[#KThread]] *> || ThreadList |
− | | KLinkedListNode<KThread> | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x558 || bool || HasStarted |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x55C || u32 || UnusedZero |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x560 || u64[2] || UnusedZeroes |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x570 || u64 || TotalTimeRunning |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x578 || u64[5] || UnusedZeroes |
− | | u64[ | ||
− | | | ||
|- | |- | ||
− | | 0x5A0 | + | | 0x5A0 || u64 || UnusedZero |
− | | u64 | ||
− | | | ||
|- | |- | ||
− | | 0x5A8 | + | | 0x5A8 || u64 || UnusedZero |
− | | u64 | ||
− | | | ||
|} | |} | ||
+ | </div> | ||
− | = | + | <div style="display: inline-block; vertical-align:top;"> |
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
− | ! Offset | + | ! 2.0.0 Offset || Type || Description |
− | + | |- | |
− | + | | 0 || [[#KSynchronizationObject]] || Inheritance | |
+ | |- | ||
+ | | 0x28 || KProcessTerminationMessage || Sent to mailbox 0 when self-terminating. | ||
+ | |- | ||
+ | | 0x38 || [[#KMemoryManager]] || MemoryManager | ||
+ | |- | ||
+ | | 0x100 || u64 || TotalMemUsage | ||
+ | |- | ||
+ | | 0x108 || [[#KLinkedList]]<[[#KTlsPageManager]]*> || TlsPagesList | ||
+ | |- | ||
+ | | 0x120 || s32 || DefaultCpuCore | ||
+ | |- | ||
+ | | 0x128 || [[#KDebug]]* || Debug | ||
+ | |- | ||
+ | | 0x130 || [[#KResourceLimit]]* || ResourceLimit | ||
+ | |- | ||
+ | | 0x138 || u32 || State | ||
+ | |- | ||
+ | | 0x140 || [[#KMutex]] || ProcessMutex | ||
+ | |- | ||
+ | | 0x148 || [[#KMutex]] || ThreadingMutex | ||
+ | |- | ||
+ | | 0x150 || [[#KLinkedListNode]]<[[#KThread]] *> || ThreadArbiterList | ||
+ | |- | ||
+ | | 0x160 || KLinkedListNode || | ||
+ | |- | ||
+ | | 0x170 || u64[4] || RandomEntropy | ||
+ | |- | ||
+ | | 0x190 || u8 || HasStateChanged | ||
+ | |- | ||
+ | | 0x191 || u8 || HasInitialized | ||
+ | |- | ||
+ | | 0x192 || u8 || IsSystem | ||
+ | |- | ||
+ | | 0x193 || u8[12+1] || ProcessName | ||
+ | |- | ||
+ | | 0x1A0 || u16 || NumberOfCreatedThreads | ||
+ | |- | ||
+ | | 0x1A2 || u16 || ThreadingRelatedInitiallyZero | ||
+ | |- | ||
+ | | 0x1A4 || u32 || ProcessFlags | ||
+ | |- | ||
+ | | 0x1A8 || [[#KProcessCapabilities]] || Capabilities | ||
+ | |- | ||
+ | | 0x258 || u64 || TitleId | ||
+ | |- | ||
+ | | 0x260 || u64 || ProcessId | ||
+ | |- | ||
+ | | 0x268 || u64 || CreatedTickstamp | ||
+ | |- | ||
+ | | 0x270 || u64 || Entrypoint | ||
+ | |- | ||
+ | | 0x278 || u64 || CodeMemUsage | ||
+ | |- | ||
+ | | 0x280 || u64 || DynamicMemUsage | ||
+ | |- | ||
+ | | 0x288 || u64 || MaxTotalMemUsage | ||
+ | |- | ||
+ | | 0x290 || u32 || ProcessCategory (0: regular title, 1: kernel built-in) | ||
+ | |- | ||
+ | | 0x298 || u64[5] || Unused [?] | ||
+ | |- | ||
+ | | 0x2C0 || [[#KProcessHandleTable]] || HandleTable | ||
+ | |- | ||
+ | | 0x2380 || void* || UsermodeExceptionTlsArea | ||
+ | |- | ||
+ | | 0x2388 || [[#KLinkedListNode]]<[[#KThread]] *> || ExceptionThreadList | ||
+ | |- | ||
+ | | 0x2398 || [[#KThread]]* || ExceptionThread | ||
+ | |- | ||
+ | | 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 |
− | | u64 | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x23F0 || u64 || ExceptionThreadUnkInfo1 |
− | | u64 | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x23F8 || u32 || UnusedZero |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x2400 || u64[8] || UnusedZeroes |
− | | u64 | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x2440 || u64 || UnusedZero |
− | | u64 | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x2448 || u64 || UnusedZero |
− | | u64 | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x2450 || u64[6] || Unused [?] |
− | | | + | |} |
− | | | + | </div> |
+ | |||
+ | == KTlsPageManager == | ||
+ | Size: 0x20 | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
|- | |- | ||
− | + | ! Offset | |
− | + | ! Type | |
− | + | ! Description | |
|- | |- | ||
− | | | + | | 0 || void* || TlsPagePtr |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 8 || [[#KProcess*]] || ProcessPtr |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x10 || u32 || UsageCount |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x14 || u8[8] || IsSlotFree |
− | | | ||
− | | | ||
|} | |} | ||
Line 288: | Line 530: | ||
! Description | ! Description | ||
|- | |- | ||
− | | 0 | + | | 0 || u8[16] || SvcAccessMask |
− | | u8[16] | ||
− | | SvcAccessMask | ||
|- | |- | ||
− | | 0x10 | + | | 0x10 || u8[128] || IrqAccessMask |
− | | u8[128] | ||
− | | IrqAccessMask | ||
|- | |- | ||
− | | 0x90 | + | | 0x90 || u64 || AllowedCpuIdBitmask |
− | | u64 | ||
− | | AllowedCpuIdBitmask | ||
|- | |- | ||
− | | 0x98 | + | | 0x98 || u64 || AllowedThreadPrioBitmask |
− | | u64 | ||
− | | AllowedThreadPrioBitmask | ||
|- | |- | ||
− | | 0xA0 | + | | 0xA0 || u32 || DebuggingFlags |
− | | u32 | ||
− | | DebuggingFlags | ||
|- | |- | ||
− | | 0xA4 | + | | 0xA4 || u32 || HandleTableSize |
− | | u32 | ||
− | | HandleTableSize | ||
|- | |- | ||
− | | 0xA8 | + | | 0xA8 || u32 || KernelReleaseVersion |
− | | u32 | ||
− | | | ||
|- | |- | ||
− | | 0xAC | + | | 0xAC || u32 || ApplicationType |
− | | u32 | ||
− | | | ||
|} | |} | ||
== KProcessHandleTable == | == KProcessHandleTable == | ||
− | Size: 0x2A0 | + | [1.0.0] Size: 0x2A0 |
+ | |||
+ | [2.0.0] Size: 0x20C0 | ||
+ | |||
+ | <div style="display: inline-block"> | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! 1.0.0 Offset || Type || Description | ||
+ | |- | ||
+ | | 0 || [[#KHandleEntry]]* || TablePtr | ||
+ | |- | ||
+ | | 8 || [[#KHandleEntry]]* || NextFreeEntry | ||
+ | |- | ||
+ | | 0x10 || [[#KHandleEntry]][40] || InternalTable | ||
+ | |- | ||
+ | | 0x290 || u16 || Size | ||
+ | |- | ||
+ | | 0x292 || u16 || MaxUsageAtOnce | ||
+ | |- | ||
+ | | 0x294 || u16 || IdCounter | ||
+ | |- | ||
+ | | 0x296 || u16 || NumActiveSlots | ||
+ | |- | ||
+ | | 0x298 || [[#KSpinLock]] || Lock | ||
+ | |} | ||
+ | </div> | ||
+ | |||
+ | <div style="display: inline-block; vertical-align:top;"> | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! 2.0.0 Offset || Type || Description | ||
+ | |- | ||
+ | | 0 || [[#KHandleEntry]]* || TablePtr | ||
+ | |- | ||
+ | | 8 || [[#KHandleEntry]]* || NextFreeEntry | ||
+ | |- | ||
+ | | 0x10 || [[#KHandleEntry]][1024] || InternalTable | ||
+ | |- | ||
+ | | 0x2010 || u16 || Size | ||
+ | |- | ||
+ | | 0x2012 || u16 || MaxUsageAtOnce | ||
+ | |- | ||
+ | | 0x2014 || u16 || IdCounter | ||
+ | |- | ||
+ | | 0x2016 || u16 || NumActiveSlots | ||
+ | |- | ||
+ | | 0x2040 || [[#KSpinLock]] || Lock | ||
+ | |} | ||
+ | </div> | ||
+ | |||
+ | === KHandleEntry === | ||
+ | [1.0.0] Size: 0x10 | ||
+ | |||
+ | [2.0.0] Size: 8 | ||
+ | |||
+ | [5.0.0] Size: 0x10 | ||
+ | |||
+ | <div style="display: inline-block"> | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! 1.0.0 Offset || Type || Description | ||
+ | |- | ||
+ | | 0 || u16 || HandleId | ||
+ | |- | ||
+ | | 2 || u8 || ObjectType | ||
+ | |- | ||
+ | | 8 || [[#KAutoObject]]* || Object | ||
+ | |} | ||
+ | </div> | ||
+ | |||
+ | <div style="display: inline-block; vertical-align:top;"> | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! 2.0.0 Offset || Type || Description | ||
+ | |- | ||
+ | | 0 || u16 || HandleId | ||
+ | |- | ||
+ | | 2 || u8 || ObjectType | ||
+ | |- | ||
+ | | 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> | ||
+ | |||
+ | === KSpinLock === | ||
+ | [1.0.0] Size: 0x1 | ||
+ | |||
+ | [2.0.0] Size: 0x40 | ||
+ | |||
+ | <div style="display: inline-block"> | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! 1.0.0 Offset || Type || Description | ||
+ | |- | ||
+ | | 0 || u8 || IsBusy | ||
+ | |} | ||
+ | </div> | ||
+ | |||
+ | <div style="display: inline-block; vertical-align:top;"> | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! 2.0.0 Offset || Type || Description | ||
+ | |- | ||
+ | | 0 || u16 || | ||
+ | |- | ||
+ | | 0x20 || u16 || | ||
+ | |} | ||
+ | </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 = | ||
+ | [1.0.0] Size: 0xB8 | ||
+ | |||
+ | [2.0.0] Size: 0xC8 | ||
+ | |||
+ | [5.0.0] Size: 0xF8? | ||
+ | |||
+ | <div style="display: inline-block"> | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! 1.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 || HeapMaxAllocation | ||
+ | |- | ||
+ | | 0x48 || [[#KMutex]] || Mutex | ||
+ | |- | ||
+ | | 0x50 || [[#KPageTable]] || PageTable | ||
+ | |- | ||
+ | | 0x60 || [[#KMemoryBlockManager]] || MemoryBlockManager | ||
+ | |- | ||
+ | | 0x78 || bool || IsKernel | ||
+ | |- | ||
+ | | 0x79 || bool || IsSystem | ||
+ | |- | ||
+ | | 0x7A || bool || IsAddrSpace36Bit | ||
+ | |- | ||
+ | | 0x7B || bool || HasAslr | ||
+ | |- | ||
+ | | 0x7C || u32 || Is_0x59_If_Cfg12_Bit0_ElseZero | ||
+ | |- | ||
+ | | 0x80 || u32 || Is_0x5A_If_Cfg12_Bit0_ElseZero | ||
+ | |- | ||
+ | | 0x84 || u32 || Is_0x58_If_Cfg12_Bit0_ElseZero | ||
+ | |- | ||
+ | | 0x88 || || | ||
+ | |- | ||
+ | | 0x90 || || | ||
+ | |- | ||
+ | | 0x98 || || | ||
+ | |- | ||
+ | | 0xA0 || u64 || TranslationTableBaseRegister0 | ||
+ | |- | ||
+ | | 0xA8 || u64 || TranslationControlRegister | ||
+ | |- | ||
+ | | 0xB0 || u8 || AsidTagValue | ||
+ | |} | ||
+ | </div> | ||
+ | <div style="display: inline-block; vertical-align:top;"> | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
− | ! Offset | + | ! 2.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 || [[#KMutex]] || Mutex | ||
+ | |- | ||
+ | | 0x70 || [[#KPageTable]] || PageTable | ||
+ | |- | ||
+ | | 0x80 || [[#KMemoryBlockManager]] || MemoryBlockManager | ||
+ | |- | ||
+ | | 0x98 || u32 || AddressSpaceWidth (32/36/39) | ||
+ | |- | ||
+ | | 0x9C || bool || IsKernel | ||
+ | |- | ||
+ | | 0x9D || bool || IsSystem | ||
+ | |- | ||
+ | | 0x9E || bool || HasAslr | ||
+ | |- | ||
+ | | 0xA0 || u32 || PoolPartition | ||
+ | |- | ||
+ | | 0xA4 || u32 || Is_0x5A_If_Cfg12_Bit0_ElseZero | ||
+ | |- | ||
+ | | 0xA8 || u32 || Is_0x59_If_Cfg12_Bit0_ElseZero | ||
+ | |- | ||
+ | | 0xAC || u32 || Is_0x58_If_Cfg12_Bit0_ElseZero | ||
+ | |- | ||
+ | | 0xB0 || u64 || TranslationTableBaseRegister0 | ||
+ | |- | ||
+ | | 0xB8 || u64 || TranslationControlRegister | ||
+ | |- | ||
+ | | 0xC0 || u32 || AsidTagValue | ||
+ | |} | ||
+ | </div> | ||
+ | |||
+ | <div style="display: inline-block; vertical-align:top;"> | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! 5.0.0 Offset | ||
! Type | ! Type | ||
! Description | ! Description | ||
|- | |- | ||
− | | 0 | + | | 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> | ||
+ | |||
+ | == KPageTable == | ||
+ | Size: 0x10 | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Type | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0 || void* || RawPageTablePtr | ||
+ | |- | ||
+ | | 8 || bool || | ||
+ | |- | ||
+ | | 0xC || u32 || AddrSpaceSizeInGb | ||
+ | |} | ||
+ | |||
+ | == KMemoryBlockManager == | ||
+ | Size: 0x18 | ||
− | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 370: | Line 900: | ||
! Description | ! Description | ||
|- | |- | ||
− | | 0 | + | | 0 || [[#KMemoryBlock]]* || MemoryBlockList |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 8 || u64 || MaxAddr |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x10 || u64 || MinAddr |
− | | | ||
− | | | ||
|} | |} | ||
Line 392: | Line 916: | ||
! Description | ! Description | ||
|- | |- | ||
− | | 0 | + | | 0 || [[#KLinkedListNode]]<[[#KMemoryBlock]] *> || NodeFor__MemoryBlockList |
− | | [[#KMemoryBlock]]* | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x10 || || |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x18 || || |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x20 || u64 || BaseAddress |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x28 || u64 || NumOfPages |
− | | u64 | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x30 || u32 || State |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x34 || u16 || IpcRefCount [?] |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x36 || u16 || DeviceMapRefCount |
− | | u16 | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x38 || u8 || Permission |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x39 || u8 || UnkAttribute |
− | | u8 | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x3A || u8 || Attribute |
− | | u8 | ||
− | |||
− | | | ||
− | |||
− | |||
− | | Attribute | ||
|} | |} | ||
Line 450: | Line 948: | ||
! Description | ! Description | ||
|- | |- | ||
− | | 0 | + | | 0 || u64 || BaseAddress |
− | | u64 | ||
− | | BaseAddress | ||
|- | |- | ||
− | | 8 | + | | 8 || u64 || Size |
− | | u64 | ||
− | | Size | ||
|- | |- | ||
− | | 0x10 | + | | 0x10 || u32 || State |
− | | u32 | ||
− | | State | ||
|- | |- | ||
− | | 0x14 | + | | 0x14 || u8 || Permission |
− | | u8 | ||
− | | Permission | ||
|- | |- | ||
− | | 0x15 | + | | 0x15 || u8 || Attribute |
− | | u8 | ||
− | | Attribute | ||
|- | |- | ||
− | | 0x16 | + | | 0x16 || u8 || UnkAttribute |
− | | u8 | ||
− | | UnkAttribute | ||
|- | |- | ||
− | | | + | | 0x18 || u16 || IpcRefCount [?] |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x1A || u16 || DeviceMapRefCount |
− | | u16 | ||
− | |||
− | | | ||
− | |||
− | |||
− | | DeviceMapRefCount | ||
|} | |} | ||
Line 498: | Line 976: | ||
! Description | ! Description | ||
|- | |- | ||
− | | 0 | + | | 0 || [[#KAutoObject]] || Inheritance |
− | | [[#KAutoObject]] | ||
− | | | ||
|- | |- | ||
− | | 0x10 | + | | 0x10 || KMemoryBlockList || Blocks |
− | | KMemoryBlockList | ||
− | | Blocks | ||
|- | |- | ||
− | | 0x28 | + | | 0x28 || [[#KProcess]]* || OwnerProcess |
− | | [[#KProcess]]* | ||
− | | OwnerProcess | ||
|- | |- | ||
− | | 0x30 | + | | 0x30 || u64 || BaseAddress |
− | | u64 | ||
− | | BaseAddress | ||
|- | |- | ||
− | | 0x38 | + | | 0x38 || KMutex || Mutex |
− | | | ||
− | | Mutex | ||
|- | |- | ||
− | | 0x40 | + | | 0x40 || int || Permission |
− | | int | ||
− | | Permission | ||
|- | |- | ||
− | | 0x44 | + | | 0x44 || bool || HasInited |
− | | bool | ||
− | | HasInited | ||
|- | |- | ||
− | | 0x45 | + | | 0x45 || bool || IsMapped |
− | | bool | ||
− | | IsMapped | ||
|} | |} | ||
= KSharedMemory = | = KSharedMemory = | ||
− | Size: 0x40 | + | [1.0.0] Size: 0x40 |
+ | |||
+ | [2.0.0] Size: 0x48 | ||
+ | |||
+ | Inherits from: [[#KAutoObject]] | ||
+ | |||
+ | <div style="display: inline-block;"> | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! 1.0.0 Offset || Type || Description | ||
+ | |- | ||
+ | | 0 || [[#KAutoObject]] || Inheritance | ||
+ | |- | ||
+ | | 0x10 || KMemoryBlockList || Blocks | ||
+ | |- | ||
+ | | 0x28 || [[#KProcess]]* || OwnerProcess | ||
+ | |- | ||
+ | | 0x30 || int || LocalPermission | ||
+ | |- | ||
+ | | 0x34 || int || RemotePermission | ||
+ | |- | ||
+ | | 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]] | Inherits from: [[#KAutoObject]] | ||
Line 538: | Line 1,048: | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
− | ! Offset | + | ! 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" | ||
+ | |- | ||
+ | ! 1.0.0 Offset | ||
+ | ! Type | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0 || [[#KAutoObject]] || Inheritance | ||
+ | |- | ||
+ | | 0x10 || [[#KServerPort]] || ServerSide | ||
+ | |- | ||
+ | | 0x60 || [[#KClientPort]] || ClientSide | ||
+ | |- | ||
+ | | 0x98 || u64 || | ||
+ | |- | ||
+ | | 0xA0 || bool || HasInited | ||
+ | |- | ||
+ | | 0xA1 || bool || IsLight | ||
+ | |} | ||
+ | </div> | ||
+ | |||
+ | <div style="display: inline-block; vertical-align:top;"> | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
− | ! Offset | + | ! 7.0.0 Offset |
! Type | ! Type | ||
! Description | ! Description | ||
|- | |- | ||
− | | 0 | + | | 0 || [[#KAutoObject]] || Inheritance |
− | | [[#KAutoObject]] | + | |- |
− | | | + | | 0x30 || [[#KServerPort]] || ServerSide |
|- | |- | ||
− | | | + | | 0xA0 || [[#KClientPort]] || ClientSide |
− | | [[# | ||
− | | | ||
|- | |- | ||
− | | | + | | 0xF8 || u64 || |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x100 || char* || NamePtr |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x108 || bool || HasInited |
− | | bool | ||
− | | HasInited | ||
|- | |- | ||
− | | | + | | 0x109 || bool || IsLight |
− | | bool | ||
− | | IsLight | ||
|} | |} | ||
+ | </div> | ||
== KServerPort == | == KServerPort == | ||
Line 614: | Line 1,130: | ||
! Description | ! Description | ||
|- | |- | ||
− | | 0 | + | | 0 || [[#KSynchronizationObject]] || Inheritance |
− | | [[#KSynchronizationObject]] | ||
− | | | ||
|- | |- | ||
− | | 0x28 | + | | 0x28 || [[#KLinkedListNode]] || IncomingConnections |
− | | [[#KLinkedListNode]] | ||
− | | IncomingConnections | ||
|- | |- | ||
− | | 0x38 | + | | 0x38 || [[#KLinkedListNode]] || IncomingLightConnections |
− | | [[#KLinkedListNode]] | ||
− | | IncomingLightConnections | ||
|- | |- | ||
− | | 0x48 | + | | 0x48 || [[#KPort]]* || Parent |
− | | [[#KPort]]* | ||
− | | Parent | ||
|} | |} | ||
Line 642: | Line 1,150: | ||
! Description | ! Description | ||
|- | |- | ||
− | | 0 | + | | 0 || [[#KSynchronizationObject]] || Inheritance |
− | | [[#KSynchronizationObject]] | ||
− | | | ||
|- | |- | ||
− | | 0x28 | + | | 0x28 || u32 || NumSessions |
− | | u32 | ||
− | | NumSessions | ||
|- | |- | ||
− | | 0x2C | + | | 0x2C || u32 || MaxSessions |
− | | u32 | ||
− | | MaxSessions | ||
|- | |- | ||
− | | 0x30 | + | | 0x30 || [[#KPort]]* || Parent |
− | | [[#KPort]]* | ||
− | | Parent | ||
|} | |} | ||
Line 670: | Line 1,170: | ||
! Description | ! Description | ||
|- | |- | ||
− | | 0 | + | | 0 || [[#KAutoObject]] || Inheritance |
− | | [[#KAutoObject]] | ||
− | | | ||
|- | |- | ||
− | | 0x10 | + | | 0x10 || [[#KServerSession]] || ServerSide |
− | | [[#KServerSession]] | ||
− | | ServerSide | ||
|- | |- | ||
− | | 0x70 | + | | 0x70 || [[#KClientSession]] || ClientSide |
− | | [[#KClientSession]] | ||
− | | ClientSide | ||
|- | |- | ||
− | | 0xA8 | + | | 0xA8 || bool || HasInited |
− | | bool | ||
− | | HasInited | ||
|} | |} | ||
Line 694: | Line 1,186: | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
− | ! Offset | + | ! Offset || Type || Description |
− | ! Type | + | |- |
− | + | | 0 || [[#KSynchronizationObject]] || Inheritance | |
+ | |- | ||
+ | | 0x28 || KLinkedListNode || NodeFor__IncomingConnections | ||
+ | |- | ||
+ | | 0x38 || [[#KSession*]] || Parent | ||
+ | |- | ||
+ | | 0x40 || KLinkedListNode<[[#KSessionRequest]]*> || RequestList | ||
+ | |- | ||
+ | | 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 734: | Line 1,263: | ||
! Description | ! Description | ||
|- | |- | ||
− | | 0 | + | | 0 || [[#KAutoObject]] || Inheritance |
− | | [[#KAutoObject]] | ||
− | | | ||
|- | |- | ||
− | | 0x10 | + | | 0x10 || [[#KSession]]* || Parent |
− | | [[#KSession]]* | ||
− | | Parent | ||
|- | |- | ||
− | | 0x18 | + | | 0x18 || bool || HasInited |
− | | bool | ||
− | | HasInited | ||
|- | |- | ||
− | | 0x20 | + | | 0x20 || [[#KClientPort]]* || ParentPort |
− | | [[#KClientPort]]* | ||
− | | ParentPort | ||
|- | |- | ||
− | | 0x28 | + | | 0x28 || || |
− | | | ||
− | | | ||
|- | |- | ||
− | | 0x30 | + | | 0x30 || [[#KProcess]]* || CreatorProcess |
− | | [[#KProcess]]* | ||
− | | CreatorProcess | ||
|} | |} | ||
Line 770: | Line 1,287: | ||
! Description | ! Description | ||
|- | |- | ||
− | | 0 | + | | 0 || [[#KAutoObject]] || Inheritance |
− | | [[#KAutoObject]] | ||
− | | | ||
|- | |- | ||
− | | 0x10 | + | | 0x10 || [[#KLightSessionServer]] || ServerSide |
− | | [[#KLightSessionServer]] | ||
− | | ServerSide | ||
|- | |- | ||
− | | 0x68 | + | | 0x68 || [[#KLightSessionClient]] || ClientSide |
− | | [[#KLightSessionClient]] | ||
− | | ClientSide | ||
|- | |- | ||
− | | 0xA0 | + | | 0xA0 || bool || HasInited |
− | | bool | ||
− | | HasInited | ||
|} | |} | ||
Line 798: | Line 1,307: | ||
! Description | ! Description | ||
|- | |- | ||
− | | 0 | + | | 0 || [[#KAutoObject]] || Inheritance |
− | | [[#KAutoObject]] | ||
− | | | ||
|- | |- | ||
− | | 0x10 | + | | 0x10 || KLinkedListNode || NodeFor__IncomingLightConnections |
− | | KLinkedListNode | ||
− | | NodeFor__IncomingLightConnections | ||
|- | |- | ||
− | | 0x20 | + | | 0x20 || [[#KLightSession]] || Parent |
− | | [[#KLightSession]] | ||
− | | Parent | ||
|- | |- | ||
− | | 0x28 | + | | 0x28 || u64[6] || |
− | | u64[6] | ||
− | | | ||
|} | |} | ||
Line 826: | Line 1,327: | ||
! Description | ! Description | ||
|- | |- | ||
− | | 0 | + | | 0 || [[#KAutoObject]] || Inheritance |
− | | [[#KAutoObject]] | ||
− | | | ||
|- | |- | ||
− | | 0x10 | + | | 0x10 || [[#KLightSession]]* || Parent |
− | | [[#KLightSession]]* | ||
− | | Parent | ||
|- | |- | ||
− | | 0x18 | + | | 0x18 || bool || HasInited |
− | | bool | ||
− | | HasInited | ||
|- | |- | ||
− | | 0x20 | + | | 0x20 || [[#KClientPort]]* || Port |
− | | [[#KClientPort]]* | ||
− | | Port | ||
|- | |- | ||
− | | 0x28 | + | | 0x28 || || |
− | | | ||
− | | | ||
|- | |- | ||
− | | 0x30 | + | | 0x30 || [[#KProcess]]* || CreatorProcess |
− | | [[#KProcess]]* | ||
− | | CreatorProcess | ||
|} | |} | ||
Line 862: | Line 1,351: | ||
! Description | ! Description | ||
|- | |- | ||
− | | 0 | + | | 0 || [[#KAutoObject]] || Inheritance |
− | | [[#KAutoObject]] | ||
− | | | ||
|- | |- | ||
− | | 0x10 | + | | 0x10 || [[#KReadableEvent]] || ReadableEvent |
− | | [[#KReadableEvent]] | ||
− | | ReadableEvent | ||
|- | |- | ||
− | | 0x48 | + | | 0x48 || [[#KWritableEvent]] || WritableEvent |
− | | [[#KWritableEvent]] | ||
− | | WritableEvent | ||
|- | |- | ||
− | | 0x60 | + | | 0x60 || [[#KProcess]]* || Creator |
− | | [[#KProcess]]* | ||
− | | Creator | ||
|- | |- | ||
− | | 0x68 | + | | 0x68 || bool || HasInited |
− | | bool | ||
− | | HasInited | ||
|} | |} | ||
Line 894: | Line 1,373: | ||
! Description | ! Description | ||
|- | |- | ||
− | | 0 | + | | 0 || [[#KSynchronizationObject]] || Inheritance |
− | | [[#KSynchronizationObject]] | ||
− | | | ||
|- | |- | ||
− | | 0x28 | + | | 0x28 || bool || |
− | | bool | ||
− | | | ||
|- | |- | ||
− | | 0x30 | + | | 0x30 || [[#KEvent]]* || Parent |
− | | [[#KEvent]]* | ||
− | | Parent | ||
|} | |} | ||
Line 918: | Line 1,391: | ||
! Description | ! Description | ||
|- | |- | ||
− | | 0 | + | | 0 || [[#KAutoObject]] || Inheritance |
− | | [[#KAutoObject]] | ||
− | | | ||
|- | |- | ||
− | | 0x10 | + | | 0x10 || [[#KEvent]]* || Parent |
− | | [[#KEvent]]* | ||
− | | Parent | ||
|} | |} | ||
== 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" | ||
+ | |- | ||
+ | ! 1.0.0 Offset || Type || Description | ||
+ | |- | ||
+ | | 0 || [[#KReadableEvent]] || Inheritance | ||
+ | |- | ||
+ | | 0x38 || [[#KInterruptReceiver]] || Receiver | ||
+ | |- | ||
+ | | 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" | {| class="wikitable" border="1" | ||
|- | |- | ||
− | ! Offset | + | ! Offset || Type || Description |
− | + | |- | |
− | + | | 0 || * || Vtable | |
|- | |- | ||
− | | | + | | 8 || u64 || InitiallyZero |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x10 || [[#KInterruptEvent]]* || IrqEventPtr |
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | 0x18 || s32 || IrqId |
− | | | ||
− | | IrqId | ||
|} | |} | ||
+ | </div> | ||
− | = | + | = KDeviceAddressSpace = |
Size: 0x70 | Size: 0x70 | ||
Line 962: | Line 1,472: | ||
! Description | ! Description | ||
|- | |- | ||
− | | 0 | + | | 0 || [[#KAutoObject]] || Inheritance |
− | | [[#KAutoObject]] | ||
− | | | ||
|- | |- | ||
− | | 0x10 | + | | 0x10 || [[#KMutex]] || Mutex |
− | | | ||
− | | Mutex | ||
|- | |- | ||
− | | 0x18 | + | | 0x18 || [[#KSmmuManager]] || Manager |
− | | [[#KSmmuManager]] | ||
− | | Manager | ||
|- | |- | ||
− | | 0x58 | + | | 0x58 || u64 || BaseAddress |
− | | u64 | ||
− | | BaseAddress | ||
|- | |- | ||
− | | 0x60 | + | | 0x60 || u64 || Size |
− | | u64 | ||
− | | Size | ||
|- | |- | ||
− | | 0x68 | + | | 0x68 || bool || HasInited |
− | | bool | ||
− | | HasInited | ||
|} | |} | ||
+ | |||
+ | [1.0.0] It was called KAddressSpace. | ||
== KSmmuManager == | == KSmmuManager == | ||
Line 996: | Line 1,496: | ||
! Description | ! Description | ||
|- | |- | ||
− | | 0 | + | | 0 || u8[4] || PageTableAsids |
− | | u8[4 | + | |- |
− | | | + | | 8 || void*[4] || PageDirectories |
+ | |- | ||
+ | | 0x28 || u64 || AttachedDevicesMask | ||
+ | |- | ||
+ | | 0x30 || u32 || RegVal32Bit | ||
+ | |- | ||
+ | | 0x34 || u32 || RegVal32BitEmpty | ||
+ | |- | ||
+ | | 0x38 || u32 || RegVal36Bit | ||
+ | |- | ||
+ | | 0x3C || u32 || RegVal36BitEmpty | ||
+ | |} | ||
+ | |||
+ | = KResourceLimit = | ||
+ | Size: 0x68 | ||
+ | |||
+ | Inherits from: [[#KAutoObject]] | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Type | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0 || [[#KAutoObject]] || Inheritance | ||
+ | |- | ||
+ | | 0x10 || u64[5] || CurrentValue | ||
+ | |- | ||
+ | | 0x38 || u64[5] || LimitValue | ||
+ | |- | ||
+ | | 0x60 || [[#KMutex]] || Mutex | ||
+ | |} | ||
+ | |||
+ | = KPoolManager = | ||
+ | [1.0.0] Size: 0x380 | ||
+ | |||
+ | [2.0.0] Size: 0x450 | ||
+ | |||
+ | <div style="display: inline-block;"> | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! 1.0.0 Offset || Type || Description | ||
+ | |- | ||
+ | | 0 || [[#KPoolAllocator]][3] || Allocator | ||
+ | |- | ||
+ | | 0x348 || [[#KPoolRefManager]] || RefManager | ||
+ | |- | ||
+ | | 0x368 || u64 || AllocationCounter | ||
+ | |- | ||
+ | | 0x370 || u64 || | ||
+ | |- | ||
+ | | 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 == | ||
+ | [1.0.0] Size: 0x118 | ||
+ | |||
+ | [2.0.0] Size: 0x220 | ||
+ | |||
+ | <div style="display: inline-block;"> | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! 1.0.0 Offset || Type || Description | ||
+ | |- | ||
+ | | 0 || void* || MemoryBase | ||
+ | |- | ||
+ | | 8 || u64 || MemorySize | ||
+ | |- | ||
+ | | 0x10 || s32 || NumPools | ||
+ | |- | ||
+ | | 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 === | ||
+ | [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" | ||
+ | |- | ||
+ | ! 2.0.0 Offset || Type || Description | ||
+ | |- | ||
+ | | 0 || KPoolHeader* || FirstFreeChunk | ||
+ | |- | ||
+ | | 8 || u64 || | ||
+ | |- | ||
+ | | 0x10 || u64 || | ||
+ | |- | ||
+ | | 0x18 || void* || SingletonTableEntryPtr | ||
+ | |- | ||
+ | | 0x20 || [[#KPool]]* || Parent | ||
+ | |- | ||
+ | | 0x30 || u64[2] || DmaProtectionKey | ||
+ | |} | ||
+ | </div> | ||
+ | |||
+ | == KPoolRefManager == | ||
+ | [1.0.0] Size: 0x20 | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset || Type || Description | ||
+ | |- | ||
+ | | 0 || [[#KPoolManager]]* || Parent | ||
+ | |- | ||
+ | | 8 || void* || PoolBase | ||
+ | |- | ||
+ | | 0x10 || u64 || MaxPage | ||
+ | |- | ||
+ | | 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 |
− | | | ||
− | | | ||
|} | |} |
Latest revision as of 00:41, 6 March 2024
KAutoObject
Size: 0x10
[5.0.0] Size: 0x20
[6.0.0] Size: 0x30
Offset | Type | Description |
---|---|---|
0 | * | Vtable |
8 | u32 | ReferenceCount |
[5.0.0]:
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]:
Offset | Type | Description |
---|---|---|
0 | * | Vtable |
8 | u32 | ReferenceCount |
0x10 | #KRedBlackTreeNode | Intrusive red-black tree node, replaces the Intrusive list node from previous versions. |
KSynchronizationObject
Size: 0x28
[5.0.0] Size: 0x38
[6.0.0] Size: 0x48
Inherits from: #KAutoObject
Offset | Type | Description |
---|---|---|
0 | #KAutoObject | Inheritance |
0x10 | #KLinkedList | ThreadSyncList |
KMutex
Size: 0x8
Offset | Type | Description |
---|---|---|
0 | u64 | OwnerTag |
KRecursiveLock
Size: 0x18
Offset | Type | Description |
---|---|---|
0 | #KThread * | Owner |
8 | s32 | Count |
KLockedList
Size: 0x28
[5.0.0]? Size: 0x20
Offset | Type | Description |
---|---|---|
0 | u64 | Count |
8 | #KLinkedListNode | List |
0x18 | #KMutex | Mutex |
0x20 | u64 | MaxCount |
[5.0.0]?:
Offset | Type | Description |
---|---|---|
0 | #KLinkedListNode | List |
0x10 | #KMutex | Mutex |
0x18 | u64 | MaxCount |
KLinkedListNode
Size: 0x10
Offset | Type | Description |
---|---|---|
0 | #KLinkedListNode* | Prev |
8 | #KLinkedListNode* | Next |
KLinkedListEntry
Size: 0x10 + sizeof(T)
Offset | Type | Description |
---|---|---|
0 | #KLinkedListNode | NodeFor__List |
0x10 | T | Data |
KLinkedList
Size: 0x18
Offset | Type | Description |
---|---|---|
0 | u64 | Count |
8 | #KLinkedListNode | Bounds (first, last) |
KRedBlackTreeNode
Size: 0x20
Note: This is BSD sys/tree.h's RB_ENTRY(...).
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);
Offset | Type | Description |
---|---|---|
0 | KRedBlackTreeNode* | Root |
KThread
[1.0.0] Size: 0x620 [5.0.0]? Size: 0x6C0
Inherits from: #KSynchronizationObject, #KSchedulerObject0, #KSchedulerObject1, #KSchedulerObject2
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 |
... | ... | ... |
KProcess
[1.0.0] Size: 0x5B0
[2.0.0] Size: 0x2480
[3.0.0] Size: 0x2580
[5.0.0] Size: 0x4600
Inherits from: #KSynchronizationObject
1.0.0 Offset | Type | Description |
---|---|---|
0 | #KSynchronizationObject | Inheritance |
0x28 | KProcessTerminationMessage | Sent to mailbox 0 when self-terminating. |
0x38 | #KMemoryManager | MemoryManager |
0xF0 | u64 | TotalMemUsage |
0xF8 | #KLinkedList<#KTlsPageManager*>> | TlsPagesList |
0x110 | s32 | DefaultCpuCore |
0x118 | #KDebug* | Debug |
0x120 | #KResourceLimit* | ResourceLimit |
0x128 | u32 | State |
0x130 | #KMutex | ProcessMutex |
0x138 | #KMutex | ThreadingMutex |
0x140 | #KLinkedListNode<#KThread *> | ThreadArbiterList |
0x150 | KLinkedListNode | |
0x160 | u64[4] | RandomEntropy |
0x180 | u8 | HasStateChanged |
0x181 | u8 | HasInitialized |
0x182 | u8 | IsSystem |
0x183 | u8[12+1] | ProcessName |
0x190 | u16 | NumberOfCreatedThreads |
0x192 | u16 | ThreadingRelatedInitiallyZero |
0x194 | u32 | ProcessFlags |
0x198 | #KProcessCapabilities | Capabilities |
0x248 | u64 | TitleId |
0x250 | u64 | ProcessId |
0x258 | u64 | CreatedTickstamp |
0x260 | u64 | Entrypoint |
0x268 | u64 | CodeMemUsage |
0x270 | u64 | DynamicMemUsage |
0x278 | u64 | MaxTotalMemUsage |
0x280 | u32 | ProcessCategory (0: regular title, 1: kernel built-in) |
0x288 | #KProcessHandleTable | HandleTable |
0x528 | void* | UsermodeExceptionTlsArea |
0x530 | #KLinkedListNode<#KThread *> | ExceptionThreadList |
0x540 | #KThread* | ExceptionThread |
0x548 | #KLinkedListNode<#KThread *> | ThreadList |
0x558 | bool | HasStarted |
0x55C | u32 | UnusedZero |
0x560 | u64[2] | UnusedZeroes |
0x570 | u64 | TotalTimeRunning |
0x578 | u64[5] | UnusedZeroes |
0x5A0 | u64 | UnusedZero |
0x5A8 | u64 | UnusedZero |
2.0.0 Offset | Type | Description |
---|---|---|
0 | #KSynchronizationObject | Inheritance |
0x28 | KProcessTerminationMessage | Sent to mailbox 0 when self-terminating. |
0x38 | #KMemoryManager | MemoryManager |
0x100 | u64 | TotalMemUsage |
0x108 | #KLinkedList<#KTlsPageManager*> | TlsPagesList |
0x120 | s32 | DefaultCpuCore |
0x128 | #KDebug* | Debug |
0x130 | #KResourceLimit* | ResourceLimit |
0x138 | u32 | State |
0x140 | #KMutex | ProcessMutex |
0x148 | #KMutex | ThreadingMutex |
0x150 | #KLinkedListNode<#KThread *> | ThreadArbiterList |
0x160 | KLinkedListNode | |
0x170 | u64[4] | RandomEntropy |
0x190 | u8 | HasStateChanged |
0x191 | u8 | HasInitialized |
0x192 | u8 | IsSystem |
0x193 | u8[12+1] | ProcessName |
0x1A0 | u16 | NumberOfCreatedThreads |
0x1A2 | u16 | ThreadingRelatedInitiallyZero |
0x1A4 | u32 | ProcessFlags |
0x1A8 | #KProcessCapabilities | Capabilities |
0x258 | u64 | TitleId |
0x260 | u64 | ProcessId |
0x268 | u64 | CreatedTickstamp |
0x270 | u64 | Entrypoint |
0x278 | u64 | CodeMemUsage |
0x280 | u64 | DynamicMemUsage |
0x288 | u64 | MaxTotalMemUsage |
0x290 | u32 | ProcessCategory (0: regular title, 1: kernel built-in) |
0x298 | u64[5] | Unused [?] |
0x2C0 | #KProcessHandleTable | HandleTable |
0x2380 | void* | UsermodeExceptionTlsArea |
0x2388 | #KLinkedListNode<#KThread *> | ExceptionThreadList |
0x2398 | #KThread* | ExceptionThread |
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 [?] |
KTlsPageManager
Size: 0x20
Offset | Type | Description |
---|---|---|
0 | void* | TlsPagePtr |
8 | #KProcess* | ProcessPtr |
0x10 | u32 | UsageCount |
0x14 | u8[8] | IsSlotFree |
KProcessCapabilities
Size: 0xB0
Offset | Type | Description |
---|---|---|
0 | u8[16] | SvcAccessMask |
0x10 | u8[128] | IrqAccessMask |
0x90 | u64 | AllowedCpuIdBitmask |
0x98 | u64 | AllowedThreadPrioBitmask |
0xA0 | u32 | DebuggingFlags |
0xA4 | u32 | HandleTableSize |
0xA8 | u32 | KernelReleaseVersion |
0xAC | u32 | ApplicationType |
KProcessHandleTable
[1.0.0] Size: 0x2A0
[2.0.0] Size: 0x20C0
1.0.0 Offset | Type | Description |
---|---|---|
0 | #KHandleEntry* | TablePtr |
8 | #KHandleEntry* | NextFreeEntry |
0x10 | #KHandleEntry[40] | InternalTable |
0x290 | u16 | Size |
0x292 | u16 | MaxUsageAtOnce |
0x294 | u16 | IdCounter |
0x296 | u16 | NumActiveSlots |
0x298 | #KSpinLock | Lock |
2.0.0 Offset | Type | Description |
---|---|---|
0 | #KHandleEntry* | TablePtr |
8 | #KHandleEntry* | NextFreeEntry |
0x10 | #KHandleEntry[1024] | InternalTable |
0x2010 | u16 | Size |
0x2012 | u16 | MaxUsageAtOnce |
0x2014 | u16 | IdCounter |
0x2016 | u16 | NumActiveSlots |
0x2040 | #KSpinLock | Lock |
KHandleEntry
[1.0.0] Size: 0x10
[2.0.0] Size: 8
[5.0.0] Size: 0x10
1.0.0 Offset | Type | Description |
---|---|---|
0 | u16 | HandleId |
2 | u8 | ObjectType |
8 | #KAutoObject* | Object |
2.0.0 Offset | Type | Description |
---|---|---|
0 | u16 | HandleId |
2 | u8 | ObjectType |
4 | u32 | ObjectCompressedPtr |
5.0.0 Offset | Type | Description |
---|---|---|
0 | u16 | HandleId |
2 | u16 | ObjectType |
8 | #KAutoObject* | object |
KSpinLock
[1.0.0] Size: 0x1
[2.0.0] Size: 0x40
1.0.0 Offset | Type | Description |
---|---|---|
0 | u8 | IsBusy |
2.0.0 Offset | Type | Description |
---|---|---|
0 | u16 | |
0x20 | u16 |
[2.0.0] Size: 0x40
Offset | Type | Description |
---|---|---|
0 | #KLinkedListNode<#KSharedMemoryRef *> | NodeFor__MappedSharedMemoriesList |
0x10 | #KSharedMemory* | SharedMem |
0x18 | u64 | InitiallyZero |
KMemoryManager
[1.0.0] Size: 0xB8
[2.0.0] Size: 0xC8
[5.0.0] Size: 0xF8?
1.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 | HeapMaxAllocation |
0x48 | #KMutex | Mutex |
0x50 | #KPageTable | PageTable |
0x60 | #KMemoryBlockManager | MemoryBlockManager |
0x78 | bool | IsKernel |
0x79 | bool | IsSystem |
0x7A | bool | IsAddrSpace36Bit |
0x7B | bool | HasAslr |
0x7C | u32 | Is_0x59_If_Cfg12_Bit0_ElseZero |
0x80 | u32 | Is_0x5A_If_Cfg12_Bit0_ElseZero |
0x84 | u32 | Is_0x58_If_Cfg12_Bit0_ElseZero |
0x88 | ||
0x90 | ||
0x98 | ||
0xA0 | u64 | TranslationTableBaseRegister0 |
0xA8 | u64 | TranslationControlRegister |
0xB0 | u8 | AsidTagValue |
2.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 | #KMutex | Mutex |
0x70 | #KPageTable | PageTable |
0x80 | #KMemoryBlockManager | MemoryBlockManager |
0x98 | u32 | AddressSpaceWidth (32/36/39) |
0x9C | bool | IsKernel |
0x9D | bool | IsSystem |
0x9E | bool | HasAslr |
0xA0 | u32 | PoolPartition |
0xA4 | u32 | Is_0x5A_If_Cfg12_Bit0_ElseZero |
0xA8 | u32 | Is_0x59_If_Cfg12_Bit0_ElseZero |
0xAC | u32 | Is_0x58_If_Cfg12_Bit0_ElseZero |
0xB0 | u64 | TranslationTableBaseRegister0 |
0xB8 | u64 | TranslationControlRegister |
0xC0 | u32 | AsidTagValue |
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 |
KPageTable
Size: 0x10
Offset | Type | Description |
---|---|---|
0 | void* | RawPageTablePtr |
8 | bool | |
0xC | u32 | AddrSpaceSizeInGb |
KMemoryBlockManager
Size: 0x18
Offset | Type | Description |
---|---|---|
0 | #KMemoryBlock* | MemoryBlockList |
8 | u64 | MaxAddr |
0x10 | u64 | MinAddr |
KMemoryBlock
Size: 0x40
Offset | Type | Description |
---|---|---|
0 | #KLinkedListNode<#KMemoryBlock *> | NodeFor__MemoryBlockList |
0x10 | ||
0x18 | ||
0x20 | u64 | BaseAddress |
0x28 | u64 | NumOfPages |
0x30 | u32 | State |
0x34 | u16 | IpcRefCount [?] |
0x36 | u16 | DeviceMapRefCount |
0x38 | u8 | Permission |
0x39 | u8 | UnkAttribute |
0x3A | u8 | Attribute |
KMemoryBlockInfo
Size: 0x20
Offset | Type | Description |
---|---|---|
0 | u64 | BaseAddress |
8 | u64 | Size |
0x10 | u32 | State |
0x14 | u8 | Permission |
0x15 | u8 | Attribute |
0x16 | u8 | UnkAttribute |
0x18 | u16 | IpcRefCount [?] |
0x1A | u16 | DeviceMapRefCount |
KTransferMemory
Size: 0x48
Inherits from: #KAutoObject
Offset | Type | Description |
---|---|---|
0 | #KAutoObject | Inheritance |
0x10 | KMemoryBlockList | Blocks |
0x28 | #KProcess* | OwnerProcess |
0x30 | u64 | BaseAddress |
0x38 | KMutex | Mutex |
0x40 | int | Permission |
0x44 | bool | HasInited |
0x45 | bool | IsMapped |
[1.0.0] Size: 0x40
[2.0.0] Size: 0x48
Inherits from: #KAutoObject
1.0.0 Offset | Type | Description |
---|---|---|
0 | #KAutoObject | Inheritance |
0x10 | KMemoryBlockList | Blocks |
0x28 | #KProcess* | OwnerProcess |
0x30 | int | LocalPermission |
0x34 | int | RemotePermission |
0x38 | bool | HasInited |
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 |
KJitMemory
[4.0.0+] Size: 0x58
Inherits from: #KAutoObject
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
[1.0.0] Size: 0xA8
[7.0.0] Size: 0x110
Inherits from: #KAutoObject
1.0.0 Offset | Type | Description |
---|---|---|
0 | #KAutoObject | Inheritance |
0x10 | #KServerPort | ServerSide |
0x60 | #KClientPort | ClientSide |
0x98 | u64 | |
0xA0 | bool | HasInited |
0xA1 | bool | IsLight |
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 |
KServerPort
Size: 0x50
Inherits from: #KSynchronizationObject
Offset | Type | Description |
---|---|---|
0 | #KSynchronizationObject | Inheritance |
0x28 | #KLinkedListNode | IncomingConnections |
0x38 | #KLinkedListNode | IncomingLightConnections |
0x48 | #KPort* | Parent |
KClientPort
Size: 0x38
Inherits from: #KSynchronizationObject
Offset | Type | Description |
---|---|---|
0 | #KSynchronizationObject | Inheritance |
0x28 | u32 | NumSessions |
0x2C | u32 | MaxSessions |
0x30 | #KPort* | Parent |
KSession
Size: 0xB0
Inherits from: #KAutoObject
Offset | Type | Description |
---|---|---|
0 | #KAutoObject | Inheritance |
0x10 | #KServerSession | ServerSide |
0x70 | #KClientSession | ClientSide |
0xA8 | bool | HasInited |
KServerSession
Size: 0x60
Inherits from: #KSynchronizationObject
Offset | Type | Description |
---|---|---|
0 | #KSynchronizationObject | Inheritance |
0x28 | KLinkedListNode | NodeFor__IncomingConnections |
0x38 | #KSession* | Parent |
0x40 | KLinkedListNode<#KSessionRequest*> | RequestList |
0x50 | #KSessionRequest* | ActiveRequest |
0x58 | #KMutex | lock |
KSessionRequest
Size: 0x158
Inherits from: #KAutoObject
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
Offset | Type | Description |
---|---|---|
0 | u64 | UserVirtAddr |
8 | u64 | Size |
0x10 | u64 | |
0x18 | u64 | BufferMemoryState |
KClientSession
Size: 0x38
Inherits from: #KAutoObject
Offset | Type | Description |
---|---|---|
0 | #KAutoObject | Inheritance |
0x10 | #KSession* | Parent |
0x18 | bool | HasInited |
0x20 | #KClientPort* | ParentPort |
0x28 | ||
0x30 | #KProcess* | CreatorProcess |
KLightSession
Size: 0xA8
Inherits from: #KAutoObject
Offset | Type | Description |
---|---|---|
0 | #KAutoObject | Inheritance |
0x10 | #KLightSessionServer | ServerSide |
0x68 | #KLightSessionClient | ClientSide |
0xA0 | bool | HasInited |
KLightServerSession
Size: 0x58
Inherits from: #KAutoObject
Offset | Type | Description |
---|---|---|
0 | #KAutoObject | Inheritance |
0x10 | KLinkedListNode | NodeFor__IncomingLightConnections |
0x20 | #KLightSession | Parent |
0x28 | u64[6] |
KLightClientSession
Size: 0x38
Inherits from: #KAutoObject
Offset | Type | Description |
---|---|---|
0 | #KAutoObject | Inheritance |
0x10 | #KLightSession* | Parent |
0x18 | bool | HasInited |
0x20 | #KClientPort* | Port |
0x28 | ||
0x30 | #KProcess* | CreatorProcess |
KEvent
Size: 0x70
Inherits from: #KAutoObject
Offset | Type | Description |
---|---|---|
0 | #KAutoObject | Inheritance |
0x10 | #KReadableEvent | ReadableEvent |
0x48 | #KWritableEvent | WritableEvent |
0x60 | #KProcess* | Creator |
0x68 | bool | HasInited |
KReadableEvent
Size: 0x38
Inherits from: #KSynchronizationEvent
Offset | Type | Description |
---|---|---|
0 | #KSynchronizationObject | Inheritance |
0x28 | bool | |
0x30 | #KEvent* | Parent |
KWritableEvent
Size: 0x18
Inherits from: #KAutoObject
Offset | Type | Description |
---|---|---|
0 | #KAutoObject | Inheritance |
0x10 | #KEvent* | Parent |
KInterruptEvent
[1.0.0] Size: 0x50
[2.0.0] Size: 0x48
Inherits from: #KReadableEvent
1.0.0 Offset | Type | Description |
---|---|---|
0 | #KReadableEvent | Inheritance |
0x38 | #KInterruptReceiver | Receiver |
0x48 | u32 | IrqId (or -1) |
2.0.0 Offset | Type | Description |
---|---|---|
0 | #KReadableEvent | Inheritance |
0x38 | #KInterruptReceiver* | Receiver |
0x40 | u32 | IrqId (or -1) |
0x44 | bool | IsIrqRegistered |
KInterruptReceiver
[1.0.0] Size: 0x10 [2.0.0] Size: 0x20
Offset | Type | Description |
---|---|---|
0 | * | Vtable |
8 | u64 |
Offset | Type | Description |
---|---|---|
0 | * | Vtable |
8 | u64 | InitiallyZero |
0x10 | #KInterruptEvent* | IrqEventPtr |
0x18 | s32 | IrqId |
KDeviceAddressSpace
Size: 0x70
Inherits from: #KAutoObject
Offset | Type | Description |
---|---|---|
0 | #KAutoObject | Inheritance |
0x10 | #KMutex | Mutex |
0x18 | #KSmmuManager | Manager |
0x58 | u64 | BaseAddress |
0x60 | u64 | Size |
0x68 | bool | HasInited |
[1.0.0] It was called KAddressSpace.
KSmmuManager
Size: 0x40
Offset | Type | Description |
---|---|---|
0 | u8[4] | PageTableAsids |
8 | void*[4] | PageDirectories |
0x28 | u64 | AttachedDevicesMask |
0x30 | u32 | RegVal32Bit |
0x34 | u32 | RegVal32BitEmpty |
0x38 | u32 | RegVal36Bit |
0x3C | u32 | RegVal36BitEmpty |
KResourceLimit
Size: 0x68
Inherits from: #KAutoObject
Offset | Type | Description |
---|---|---|
0 | #KAutoObject | Inheritance |
0x10 | u64[5] | CurrentValue |
0x38 | u64[5] | LimitValue |
0x60 | #KMutex | Mutex |
KPoolManager
[1.0.0] Size: 0x380
[2.0.0] Size: 0x450
1.0.0 Offset | Type | Description |
---|---|---|
0 | #KPoolAllocator[3] | Allocator |
0x348 | #KPoolRefManager | RefManager |
0x368 | u64 | AllocationCounter |
0x370 | u64 | |
0x378 | #KMutex | Mutex |
2.0.0 Offset | Type | Description |
---|---|---|
0 | #KPoolAllocator | Allocator0 |
0x220 | #KPartitionInfo* | PartitionInfo0 |
0x228 | #KPoolAllocator | Allocator1 |
0x448 | #KPartitionInfo* | PartitionInfo1 |
KPoolAllocator
[1.0.0] Size: 0x118
[2.0.0] Size: 0x220
1.0.0 Offset | Type | Description |
---|---|---|
0 | void* | MemoryBase |
8 | u64 | MemorySize |
0x10 | s32 | NumPools |
0x18 | #KPool[8] | Pools |
2.0.0 Offset | Type | Description |
---|---|---|
0 | void* | MemoryBase |
8 | u64 | MemorySize |
0x10 | #KPool[8] | Pools |
0x210 | s32 | NumPools |
KPool
[1.0.0] Size: 0x20
[2.0.0] Size: 0x40
1.0.0 Offset | Type | Description |
---|---|---|
0 | KPoolHeader* | FirstFreeChunk |
8 | u64 | |
0x10 | u64 | |
0x18 | void* | SingletonTableEntryPtr |
2.0.0 Offset | Type | Description |
---|---|---|
0 | KPoolHeader* | FirstFreeChunk |
8 | u64 | |
0x10 | u64 | |
0x18 | void* | SingletonTableEntryPtr |
0x20 | #KPool* | Parent |
0x30 | u64[2] | DmaProtectionKey |
KPoolRefManager
[1.0.0] Size: 0x20
Offset | Type | Description |
---|---|---|
0 | #KPoolManager* | Parent |
8 | void* | PoolBase |
0x10 | u64 | MaxPage |
0x18 | u16* | RefCountTable |
KObjectAllocator
Size: 0x50 [5.0.0]? Size: 0x48
Offset | Type | Description |
---|---|---|
0 | #KLockedList | LockedList |
0x28 | #KSlabHeap | SlabHeap |
KSlabHeap
Size: 0x28
Offset | Type | Description |
---|---|---|
0 | void* | FreeListHead |
0x8 | u64 | |
0x10 | void* | HeapPtr |
0x18 | u64 | TotalHeapSize |
0x20 | u64 | SingleObjectSize |
5.0.0 (?):
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
Offset | Type | Description |
---|---|---|
0 | u64 | |
0x10 | u16* | RefCountTable |
0x10 | void* | BaseAddress |
0x18 | u64 | Size |
0x20 | u64 | |
0x28 | u64 |
KIrqManager
[1.0.0] Size: 0x1608
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
Offset | Type | Description |
---|---|---|
0 | #KInterruptReceiver* | Receiver |
8 | u8 | State0 |
9 | u8 | State1 |
KDebug
Size: 0x50
Offset | Type | Description |
---|---|---|
0 | #KSynchronizationObject | Inheritance |
0x28 | #KLinkedListNode<#KDebugEvent> | EventList |
0x38 | u32 | Flags |
0x40 | #KProcess* | ProcessPtr |
0x48 | #KMutex | Mutex |
KDebugEvent
Size: 0x60
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
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).
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 |