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" |
| + | |- |
| + | ! 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" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 9: |
Line 35: |
| |- | | |- |
| | 8 || u32 || ReferenceCount | | | 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 || u64 || ThreadSyncNum | + | | 0x10 || [[#KLinkedList]] || ThreadSyncList |
− | |-
| |
− | | 0x18 || [[#KLinkedListNode]] || ThreadSyncList
| |
| |} | | |} |
| | | |
Line 52: |
Line 82: |
| = KLockedList = | | = KLockedList = |
| Size: 0x28 | | Size: 0x28 |
| + | |
| + | [5.0.0]? Size: 0x20 |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 66: |
Line 98: |
| |} | | |} |
| | | |
− | = KLinkedListNode = | + | [5.0.0]?: |
− | Size: 0x10 | + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset || Type || Description |
| + | |- |
| + | | 0 || [[#KLinkedListNode]] || List |
| + | |- |
| + | | 0x10 || [[#KMutex]] || Mutex |
| + | |- |
| + | | 0x18 || u64 || MaxCount |
| + | |} |
| + | |
| + | = KLinkedListNode = |
| + | Size: 0x10 |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 102: |
Line 147: |
| |} | | |} |
| | | |
− | = KThread = | + | = KRedBlackTreeNode = |
− | [1.0.0] Size: 0x620
| + | Size: 0x20 |
| | | |
− | Inherits from: [[#KSynchronizationObject]], [[#KSchedulerObject0]], [[#KSchedulerObject1]], [[#KSchedulerObject2]]
| + | Note: This is BSD sys/tree.h's RB_ENTRY(...). |
| | | |
− | <div style="display: inline-block">
| |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! 1.0.0 Offset || Type || Description | + | ! Offset || Type || Description |
− | |-
| |
− | | 0 || [[#KSynchronizationObject]] || Inheritance
| |
| |- | | |- |
− | | 0x28 || KSchedulerObject0 || Inheritance | + | | 0 || KRedBlackTreeNode* || Left Child |
| |- | | |- |
− | | 0x48 || KSchedulerObject1 || Inheritance | + | | 8 || KRedBlackTreeNode* || Right Child |
| |- | | |- |
− | | 0x58 || KSchedulerObject2 || Inheritance | + | | 0x10 || KRedBlackTreeNode* || Parent |
| |- | | |- |
− | | 0x70 || KThreadContext || Context | + | | 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 | | | 0x2F0 || u64 || CoreMask |
Line 134: |
Line 211: |
| | 0x318 || u64 || | | | 0x318 || u64 || |
| |- | | |- |
− | | 0x320 || u64 || | + | | 0x320 || u64 || CondVar_CondVarUserAddr |
| |- | | |- |
| | 0x328 || u64 || Entrypoint | | | 0x328 || u64 || Entrypoint |
| |- | | |- |
− | | 0x330 || u64 || ArbitrationUserPtr | + | | 0x330 || u64 || CondVar_MutexUserAddr |
| |- | | |- |
− | | 0x338 || [[#KProcess*]] || ProcessPtr | + | | 0x338 || [[#KProcess]]* || ProcessPtr |
| |- | | |- |
| | 0x340 || void* || KernelThreadStack | | | 0x340 || void* || KernelThreadStack |
Line 152: |
Line 229: |
| | 0x360 || [[#KSynchronizationObject]]*[0x40] || SyncObjects | | | 0x360 || [[#KSynchronizationObject]]*[0x40] || SyncObjects |
| |- | | |- |
− | | 0x560 || u64 || | + | | 0x560 || [[#KThread]]* || CondVar_NextThreadPtr |
| |- | | |- |
− | | 0x568 || u64 || | + | | 0x568 || [[#KThread]]* || CondVar_PrevThreadPtr |
| |- | | |- |
− | | 0x570 || [[#KSynchronizationObject]] || SignalledObjectPtr? | + | | 0x570 || [[#KSynchronizationObject]]* || SignalledObjectPtr? |
| |- | | |- |
| | 0x578 || KLinkedListNode || | | | 0x578 || KLinkedListNode || |
Line 166: |
Line 243: |
| | 0x5A8 || KLinkedListNode || NodeFor__ThreadsOnSameCore | | | 0x5A8 || KLinkedListNode || NodeFor__ThreadsOnSameCore |
| |- | | |- |
− | | 0x5B8 || u64 || | + | | 0x5B8 || [[#KThread]]* || |
| |- | | |- |
− | | 0x5C0 || u64 || | + | | 0x5C0 || [[#KThread]]* || CondVar_SelfPtr |
| |- | | |- |
| | 0x5C8 || u64 || | | | 0x5C8 || u64 || |
Line 176: |
Line 253: |
| | 0x5D8 || u64 || | | | 0x5D8 || u64 || |
| |- | | |- |
− | | 0x5E0 || u32 || ArbitrationReqThreadHandle | + | | 0x5E0 || u32 || CondVar_WaitThreadHandle |
| |- | | |- |
| | 0x5E4 || u32 || SchedulingFlags_Default | | | 0x5E4 || u32 || SchedulingFlags_Default |
Line 221: |
Line 298: |
| | | |
| [3.0.0] Size: 0x2580 | | [3.0.0] Size: 0x2580 |
| + | |
| + | [5.0.0] Size: 0x4600 |
| | | |
| Inherits from: [[#KSynchronizationObject]] | | Inherits from: [[#KSynchronizationObject]] |
Line 231: |
Line 310: |
| | 0 || [[#KSynchronizationObject]] || Inheritance | | | 0 || [[#KSynchronizationObject]] || Inheritance |
| |- | | |- |
− | | 0x28 || KProcessScheduler || Scheduler | + | | 0x28 || KProcessTerminationMessage || Sent to mailbox 0 when self-terminating. |
| |- | | |- |
| | 0x38 || [[#KMemoryManager]] || MemoryManager | | | 0x38 || [[#KMemoryManager]] || MemoryManager |
Line 287: |
Line 366: |
| | 0x278 || u64 || MaxTotalMemUsage | | | 0x278 || u64 || MaxTotalMemUsage |
| |- | | |- |
− | | 0x280 || u32 || From_CreateProcessInfo_0xC | + | | 0x280 || u32 || ProcessCategory (0: regular title, 1: kernel built-in) |
| |- | | |- |
| | 0x288 || [[#KProcessHandleTable]] || HandleTable | | | 0x288 || [[#KProcessHandleTable]] || HandleTable |
Line 303: |
Line 382: |
| | 0x55C || u32 || UnusedZero | | | 0x55C || u32 || UnusedZero |
| |- | | |- |
− | | 0x560 || u64[8] || UnusedZeroes | + | | 0x560 || u64[2] || UnusedZeroes |
| + | |- |
| + | | 0x570 || u64 || TotalTimeRunning |
| + | |- |
| + | | 0x578 || u64[5] || UnusedZeroes |
| |- | | |- |
| | 0x5A0 || u64 || UnusedZero | | | 0x5A0 || u64 || UnusedZero |
Line 318: |
Line 401: |
| | 0 || [[#KSynchronizationObject]] || Inheritance | | | 0 || [[#KSynchronizationObject]] || Inheritance |
| |- | | |- |
− | | 0x28 || KProcessScheduler || Scheduler | + | | 0x28 || KProcessTerminationMessage || Sent to mailbox 0 when self-terminating. |
| |- | | |- |
| | 0x38 || [[#KMemoryManager]] || MemoryManager | | | 0x38 || [[#KMemoryManager]] || MemoryManager |
Line 374: |
Line 457: |
| | 0x288 || u64 || MaxTotalMemUsage | | | 0x288 || u64 || MaxTotalMemUsage |
| |- | | |- |
− | | 0x290 || u32 || From_CreateProcessInfo_0xC | + | | 0x290 || u32 || ProcessCategory (0: regular title, 1: kernel built-in) |
| |- | | |- |
| | 0x298 || u64[5] || Unused [?] | | | 0x298 || u64[5] || Unused [?] |
Line 519: |
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 543: |
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 589: |
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"> |
Line 712: |
Line 812: |
| </div> | | </div> |
| | | |
− | == KPageTable == | + | <div style="display: inline-block; vertical-align:top;"> |
− | Size: 0x10
| |
− | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Offset | + | ! 5.0.0 Offset |
| ! Type | | ! Type |
| ! Description | | ! Description |
| |- | | |- |
− | | 0 || void* || RawPageTablePtr | + | | 0 || * || Vtable |
| + | |- |
| + | | 8 || u64 || AddrSpaceMinAddr |
| |- | | |- |
− | | 8 || bool || | + | | 0x10 || u64 || AddrSpaceMaxAddr |
| |- | | |- |
− | | 0xC || u32 || AddrSpaceSizeInGb | + | | 0x18 || u64 || HeapRegionBaseAddr |
− | |} | |
− | | |
− | == KMemoryBlockManager ==
| |
− | Size: 0x18
| |
− | | |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Offset
| + | | 0x20 || u64 || HeapRegionEndAddr |
− | ! Type
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || [[#KMemoryBlock]]* || MemoryBlockList | + | | 0x28 || u64 || HeapCurAddr |
| |- | | |- |
− | | 8 || u64 || MaxAddr | + | | 0x30 || u64 || MapRegionBaseAddr |
| |- | | |- |
− | | 0x10 || u64 || MinAddr | + | | 0x38 || u64 || MapRegionEndAddr |
− | |}
| |
− | | |
− | == KMemoryBlock ==
| |
− | Size: 0x40
| |
− | | |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Offset
| + | | 0x40 || u64 || NewMapRegionBaseAddr |
− | ! Type
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || [[#KLinkedListNode]]<[[#KMemoryBlock]] *> || NodeFor__MemoryBlockList | + | | 0x48 || u64 || NewMapRegionEndAddr |
| |- | | |- |
− | | 0x10 || || | + | | 0x50 || u64 || TlsIoRegionBaseAddr |
| + | |- |
| + | | 0x58 || u64 || TlsIoRegionEndAddr |
| + | |- |
| + | | 0x60 || u64 || HeapMaxAllocation |
| + | |- |
| + | | 0x68 || || |
| + | |- |
| + | | 0x70 || || |
| + | |- |
| + | | 0x78 || [[#KMutex]] || Mutex |
| + | |- |
| + | | 0x80 || [[#KPageTable]] || PageTable |
| + | |- |
| + | | 0x90 || [[#KMemoryBlockManager]] || MemoryBlockManager |
| |- | | |- |
− | | 0x18 || || | + | | 0xA8 || u32 || ? |
| |- | | |- |
− | | 0x20 || u64 || BaseAddress | + | | 0xAC || u32 || AddressSpaceWidth (32/36/39) |
| |- | | |- |
− | | 0x28 || u64 || NumOfPages | + | | 0xB0 || [[#KLinkedList]]? || |
| |- | | |- |
− | | 0x30 || u32 || State | + | | 0xC8 || || |
| |- | | |- |
− | | 0x34 || u16 || IpcRefCount [?] | + | | 0xD0 || || |
| |- | | |- |
− | | 0x36 || u16 || DeviceMapRefCount | + | | 0xD8 || ptr || |
| |- | | |- |
− | | 0x38 || u8 || Permission | + | | 0xE0 || u64 || TranslationTableBaseRegister0 val |
| |- | | |- |
− | | 0x39 || u8 || UnkAttribute | + | | 0xE8 || u64 || TranslationControlRegister val |
| |- | | |- |
− | | 0x3A || u8 || Attribute | + | | 0xF0 || u32 || AsidTagValue |
| |} | | |} |
| + | </div> |
| | | |
− | == KMemoryBlockInfo == | + | == KPageTable == |
− | Size: 0x20 | + | Size: 0x10 |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 785: |
Line 884: |
| ! Description | | ! Description |
| |- | | |- |
− | | 0 || u64 || BaseAddress | + | | 0 || void* || RawPageTablePtr |
| |- | | |- |
− | | 8 || u64 || Size | + | | 8 || bool || |
| |- | | |- |
− | | 0x10 || u32 || State | + | | 0xC || u32 || AddrSpaceSizeInGb |
| + | |} |
| + | |
| + | == KMemoryBlockManager == |
| + | Size: 0x18 |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 0x14 || u8 || Permission
| + | ! Offset |
| + | ! Type |
| + | ! Description |
| |- | | |- |
− | | 0x15 || u8 || Attribute | + | | 0 || [[#KMemoryBlock]]* || MemoryBlockList |
| |- | | |- |
− | | 0x16 || u8 || UnkAttribute | + | | 8 || u64 || MaxAddr |
| |- | | |- |
− | | 0x18 || u16 || IpcRefCount [?] | + | | 0x10 || u64 || MinAddr |
− | |-
| |
− | | 0x1A || u16 || DeviceMapRefCount
| |
| |} | | |} |
| | | |
− | = KTransferMemory = | + | == KMemoryBlock == |
− | Size: 0x48 | + | Size: 0x40 |
− | | |
− | Inherits from: [[#KAutoObject]]
| |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 813: |
Line 916: |
| ! Description | | ! Description |
| |- | | |- |
− | | 0 || [[#KAutoObject]] || Inheritance | + | | 0 || [[#KLinkedListNode]]<[[#KMemoryBlock]] *> || NodeFor__MemoryBlockList |
| + | |- |
| + | | 0x10 || || |
| + | |- |
| + | | 0x18 || || |
| + | |- |
| + | | 0x20 || u64 || BaseAddress |
| |- | | |- |
− | | 0x10 || KMemoryBlockList || Blocks | + | | 0x28 || u64 || NumOfPages |
| |- | | |- |
− | | 0x28 || [[#KProcess]]* || OwnerProcess | + | | 0x30 || u32 || State |
| |- | | |- |
− | | 0x30 || u64 || BaseAddress | + | | 0x34 || u16 || IpcRefCount [?] |
| |- | | |- |
− | | 0x38 || KMutex || Mutex | + | | 0x36 || u16 || DeviceMapRefCount |
| |- | | |- |
− | | 0x40 || int || Permission | + | | 0x38 || u8 || Permission |
| |- | | |- |
− | | 0x44 || bool || HasInited | + | | 0x39 || u8 || UnkAttribute |
| |- | | |- |
− | | 0x45 || bool || IsMapped | + | | 0x3A || u8 || Attribute |
| |} | | |} |
| | | |
− | = KSharedMemory = | + | == KMemoryBlockInfo == |
− | [1.0.0] Size: 0x40
| + | Size: 0x20 |
| | | |
− | [2.0.0] Size: 0x48 | + | {| class="wikitable" border="1" |
| + | |- |
| + | ! 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]] | | Inherits from: [[#KAutoObject]] |
| | | |
− | <div style="display: inline-block;">
| |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! 1.0.0 Offset || Type || Description | + | ! Offset |
| + | ! Type |
| + | ! Description |
| |- | | |- |
| | 0 || [[#KAutoObject]] || Inheritance | | | 0 || [[#KAutoObject]] || Inheritance |
Line 848: |
Line 982: |
| | 0x28 || [[#KProcess]]* || OwnerProcess | | | 0x28 || [[#KProcess]]* || OwnerProcess |
| |- | | |- |
− | | 0x30 || int || LocalPermission | + | | 0x30 || u64 || BaseAddress |
| + | |- |
| + | | 0x38 || KMutex || Mutex |
| + | |- |
| + | | 0x40 || int || Permission |
| |- | | |- |
− | | 0x34 || int || RemotePermission | + | | 0x44 || bool || HasInited |
| |- | | |- |
− | | 0x38 || bool || HasInited | + | | 0x45 || bool || IsMapped |
| |} | | |} |
− | </div>
| |
| | | |
− | <div style="display: inline-block; vertical-align:top;"> | + | = KSharedMemory = |
| + | [1.0.0] Size: 0x40 |
| + | |
| + | [2.0.0] Size: 0x48 |
| + | |
| + | Inherits from: [[#KAutoObject]] |
| + | |
| + | <div style="display: inline-block;"> |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! 2.0.0 Offset || Type || Description | + | ! 1.0.0 Offset || Type || Description |
| |- | | |- |
| | 0 || [[#KAutoObject]] || Inheritance | | | 0 || [[#KAutoObject]] || Inheritance |
Line 865: |
Line 1,009: |
| | 0x10 || KMemoryBlockList || Blocks | | | 0x10 || KMemoryBlockList || Blocks |
| |- | | |- |
− | | 0x28 || [[#KResourceLimit]]* || OwnerResourceLimit | + | | 0x28 || [[#KProcess]]* || OwnerProcess |
| |- | | |- |
− | | 0x30 || u64 || OwnerProcessPid | + | | 0x30 || int || LocalPermission |
| |- | | |- |
− | | 0x38 || 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 | | | 0x3C || int || RemotePermission |
Line 880: |
Line 1,043: |
| = KJitMemory = | | = KJitMemory = |
| [4.0.0+] Size: 0x58 | | [4.0.0+] Size: 0x58 |
| + | |
| + | Inherits from: [[#KAutoObject]] |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 885: |
Line 1,050: |
| ! Offset || Type || Description | | ! Offset || Type || Description |
| |- | | |- |
− | | 0 || [[#KLinkedListNode]]<[[#KDebugEvent]] *> || Inheritance | + | | 0 || [[#KAutoObject]] || Inheritance |
| |- | | |- |
| | 0x20 || KMemoryBlockList || Blocks | | | 0x20 || KMemoryBlockList || Blocks |
Line 903: |
Line 1,068: |
| | | |
| = 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 925: |
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 1,005: |
Line 1,198: |
| | 0x50 || [[#KSessionRequest]]* || ActiveRequest | | | 0x50 || [[#KSessionRequest]]* || ActiveRequest |
| |- | | |- |
− | | 0x58 || || | + | | 0x58 || [[#KMutex]] || lock |
| |} | | |} |
| | | |
| === KSessionRequest === | | === KSessionRequest === |
| Size: 0x158 | | Size: 0x158 |
| + | |
| + | Inherits from: [[#KAutoObject]] |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,015: |
Line 1,210: |
| ! Offset || Type || Description | | ! Offset || Type || Description |
| |- | | |- |
− | | 0 || * || Vtable | + | | 0 || [[#KAutoObject]] || Inheritance |
| |- | | |- |
| | 0x10 || KLinkedListNode || NodeFor__RequestList | | | 0x10 || KLinkedListNode || NodeFor__RequestList |
Line 1,465: |
Line 1,660: |
| = KObjectAllocator = | | = KObjectAllocator = |
| Size: 0x50 | | Size: 0x50 |
| + | [5.0.0]? Size: 0x48 |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,494: |
Line 1,690: |
| |} | | |} |
| | | |
− | | + | 5.0.0 (?): |
− | = KPageTableAllocator =
| |
− | Size: 0x30
| |
− | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
| ! Offset || Type || Description | | ! Offset || Type || Description |
| |- | | |- |
− | | 0 || u64 || | + | | 0 || void* || FreeListHead |
| |- | | |- |
− | | 0x10 || u16* || RefCountTable | + | | 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 | | | 0x10 || void* || BaseAddress |
Line 1,542: |
Line 1,753: |
| ! Offset || Type || Description | | ! Offset || Type || Description |
| |- | | |- |
− | | 0 || [[#KIrqReciever*]] || Receiver | + | | 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 |
| |- | | |- |
− | | 8 || u8 || State0 | + | | KPort || 200 |
| |- | | |- |
− | | 9 || u8 || State1 | + | | KSharedMemory || 80 |
− | |}
| |
− | | |
− | = KDebug =
| |
− | Size: 0x50
| |
− | | |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Offset || Type || Description
| + | | KTransferMemory || 200 |
| |- | | |- |
− | | 0 || [[#KSynchronizationObject]] || Inheritance | + | | KDeviceAddressSpace || 300 |
| |- | | |- |
− | | 0x28 || [[#KLinkedListNode]]<[[#KDebugEvent]]> || EventList | + | | KDebug || 4 |
| |- | | |- |
− | | 0x38 || u32 || Flags | + | | KSession || 800 |
| |- | | |- |
− | | 0x40 || [[#KProcess]]* || ProcessPtr | + | | KLightSession || 100 |
| |- | | |- |
− | | 0x48 || [[#KMutex]] || Mutex | + | | KLinkedListEntry<void*> || 17 231 |
− | |}
| |
− | | |
− | == KDebugEvent ==
| |
− | Size: 0x60
| |
− | | |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Offset || Type || Description
| + | | KLinkedListNode || 4 000 |
| |- | | |- |
− | | 0 || [[#KLinkedListNode]]<[[#KDebugEvent]] *> || NodeFor__EventList | + | | KMemoryBlock (System) || 20 000 |
| |- | | |- |
− | | 0x10 || u32 || EventType | + | | KMemoryBlock (Other) || 10 000 |
| |- | | |- |
− | | 0x14 || u32 || ThreadId | + | | KTlsPageManager || 167 |
| |- | | |- |
− | | 0x18 || u32 || Flags | + | | KManagedPort || 7 |
| |- | | |- |
− | | 0x1C || u16 || | + | | KDebugEvent || 704 |
| |- | | |- |
− | | 0x1E || bool || | + | | KSessionRequest || 1 600 |
| |- | | |- |
− | | 0x20 || ... || ... | + | | KResourceLimit || 5 |
| |} | | |} |