Difference between revisions of "Kernel"

From Nintendo Switch Brew
Jump to navigation Jump to search
Line 20: Line 20:
 
! Offset || Type || Description
 
! Offset || Type || Description
 
|-
 
|-
| 0 || [[#KAutoObject]] ||
+
| 0 || [[#KAutoObject]] || Inheritance
 
|-
 
|-
 
| 0x10 || u64 || ThreadSyncNum
 
| 0x10 || u64 || ThreadSyncNum
 
|-
 
|-
 
| 0x18 || [[#KLinkedListNode]] || ThreadSyncList
 
| 0x18 || [[#KLinkedListNode]] || ThreadSyncList
 +
|}
 +
 +
= KRecursiveLock =
 +
Size: 0x8
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Type || Description
 +
|-
 +
| 0 || u64 || OwnerTag
 +
|}
 +
 +
= KSpinLock =
 +
Size: 0x1
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Type || Description
 +
|-
 +
| 0 || u8 || IsBusy
 +
|}
 +
 +
= KLockedList =
 +
Size: 0x28
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Type || Description
 +
|-
 +
| 0 || u64 || Count
 +
|-
 +
| 8 || [[#KLinkedListNode]] || List
 +
|-
 +
| 0x18 || [[#KRecursiveLock]] || Mutex
 +
|-
 +
| 0x20 || u64 || MaxCount
 
|}
 
|}
  
Line 50: Line 86:
 
! Description
 
! Description
 
|-
 
|-
| 0
+
| 0 || [[#KSynchronizationObject]] || Inheritance
| [[#KSynchronizationObject]]
 
|
 
 
|-
 
|-
| 0x28
+
| 0x28 || ||
|  
 
|  
 
 
|-
 
|-
| 0x38
+
| 0x38 || [[#KMemoryManager]] || MemoryManager
| [[#KProcessMm]]
 
| MemoryManager
 
 
|-
 
|-
| 0xF0
+
| 0xF0 || u64 || TotalMemUsage
| u64
 
| TotalMemUsage
 
 
|-
 
|-
| 0xF8
+
| 0xF8 || u64 || TlsPagesListCount
| u64
 
| TlsPagesListCount
 
 
|-
 
|-
| 0x100
+
| 0x100 || [[#KLinkedListNode]] || TlsPagesList
| [[#KLinkedListNode]]
 
| TlsPagesList
 
 
|-
 
|-
| 0x110
+
| 0x110 || s32 || DefaultCpuCore
| s32
 
| DefaultCpuCore
 
 
|-
 
|-
| 0x118
+
| 0x118 || KDebug* || Debug
| KDebug*
 
| Debug
 
 
|-
 
|-
| 0x120
+
| 0x120 || [[#KResourceLimit]]* || ResourceLimit
| [[#KResourceLimit]]*
 
| ResourceLimit
 
 
|-
 
|-
| 0x128
+
| 0x128 || u32 || State
| u32
 
| State
 
 
|-
 
|-
| 0x130
+
| 0x130 || [[#KRecursiveLock]] || ProcessMutex
| KRecursiveLock
 
| ProcessMutex
 
 
|-
 
|-
| 0x138
+
| 0x138 || [[#KRecursiveLock]] || ThreadingMutex
| KRecursiveLock
 
| ThreadingMutex
 
 
|-
 
|-
| 0x140
+
| 0x140 || [[#KLinkedListNode]]<[[#KThread]]> || ThreadArbiterList
| KLinkedListNode<KThread>
 
| ThreadArbiterList
 
 
|-
 
|-
| 0x150
+
| 0x150 || KLinkedListNode ||
| KLinkedListNode
 
|  
 
 
|-
 
|-
| 0x160
+
| 0x160 || u64[4] || RandomEntropy
| u64[4]
 
| RandomEntropy
 
 
|-
 
|-
| 0x180
+
| 0x180 || u8 || HasStateChanged
| u8
 
| HasStateChanged
 
 
|-
 
|-
| 0x181
+
| 0x181 || u8 || HasInitialized
| u8
 
| HasInitialized
 
 
|-
 
|-
| 0x182
+
| 0x182 || u8 || IsSystem
| u8
 
| From_CreateProcessInfo_0x24_Bit6
 
 
|-
 
|-
| 0x183
+
| 0x183 || u8[12] || From_CreateProcessInfo_0
| u8[12]
 
| From_CreateProcessInfo_0
 
 
|-
 
|-
| 0x18F
+
| 0x18F || u8 || InitiallyZero
| u8
 
| InitiallyZero
 
 
|-
 
|-
| 0x190
+
| 0x190 || u16 || NumberOfCreatedThreads
| u16
 
| NumberOfCreatedThreads
 
 
|-
 
|-
| 0x192
+
| 0x192 || u16 || ThreadingRelatedInitiallyZero
| u16
 
| ThreadingRelatedInitiallyZero
 
 
|-
 
|-
| 0x194
+
| 0x194 || u32 || ProcessFlags
| u32
 
| ProcessFlags
 
 
|-
 
|-
| 0x198
+
| 0x198 || [[#KProcessCapabilities]] || Capabilities
| [[#KProcessCapabilities]]
 
| Capabilities
 
 
|-
 
|-
| 0x248
+
| 0x248 || u64 || TitleId
| u64
 
| TitleId
 
 
|-
 
|-
| 0x250
+
| 0x250 || u64 || ProcessId
| u64
 
| ProcessId
 
 
|-
 
|-
| 0x258
+
| 0x258 || u64 || CreatedTickstamp
| u64
 
| CreatedTickstamp
 
 
|-
 
|-
| 0x260
+
| 0x260 || u64 || Entrypoint
| u64
 
| From_CreateProcessInfo_0x18
 
 
|-
 
|-
| 0x268
+
| 0x268 || u64 || CodeMemUsage
| u64
 
| CodeMemUsage
 
 
|-
 
|-
| 0x270
+
| 0x270 || u64 || DynamicMemUsage
| u64
 
| DynamicMemUsage
 
 
|-
 
|-
| 0x278
+
| 0x278 || u64 || MaxTotalMemUsage
| u64
 
| MaxTotalMemUsage
 
 
|-
 
|-
| 0x280
+
| 0x280 || u64 || From_CreateProcessInfo_0xC
| u64
 
| From_CreateProcessInfo_0xC
 
 
|-
 
|-
| 0x288
+
| 0x288 || [[#KProcessHandleTable]] || HandleTable
| [[#KProcessHandleTable]]
 
| HandleTable
 
 
|-
 
|-
| 0x528
+
| 0x528 || void* || UsermodeExceptionTlsArea
| void*
 
| UsermodeExceptionTlsArea
 
 
|-
 
|-
| 0x530
+
| 0x530 || [[#KLinkedListNode]]<[[#KThread]]> || ExceptionThreadList
| KLinkedListNode<KThread>
 
| ExceptionThreadList
 
 
|-
 
|-
| 0x540
+
| 0x540 || [[#KThread]]* || ExceptionThread
| KThread*
 
| ExceptionThread
 
 
|-
 
|-
| 0x548
+
| 0x548 || [[#KLinkedListNode]]<[[#KThread]]> || ThreadList
| KLinkedListNode<KThread>
 
| ThreadList
 
 
|-
 
|-
| 0x558
+
| 0x558 || u32 ||
| u32
 
|
 
 
|-
 
|-
| 0x55C
+
| 0x55C || u32 || HasStarted
| u32
 
| HasStarted
 
 
|-
 
|-
| 0x560
+
| 0x560 || u64[8] ||
| u64[8]
 
|
 
 
|-
 
|-
| 0x5A0
+
| 0x5A0 || u64 ||
| u64
 
|
 
 
|-
 
|-
| 0x5A8
+
| 0x5A8 || u64 ||
| u64
 
|
 
 
|}
 
|}
  
== KProcessMm ==
+
== KProcessCapabilities ==
 +
Size: 0xB0
 +
 
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 226: Line 180:
 
! Description
 
! Description
 
|-
 
|-
| 0
+
| 0 || u8[16] || SvcAccessMask
| *
 
| Vtable
 
 
|-
 
|-
| 8
+
| 0x10 || u8[128] || IrqAccessMask
| u64
 
| AddrSpaceMinAddr
 
 
|-
 
|-
| 0x10
+
| 0x90 || u64 || AllowedCpuIdBitmask
| u64
 
| AddrSpaceMaxAddr
 
 
|-
 
|-
| 0x18
+
| 0x98 || u64 || AllowedThreadPrioBitmask
| u64
 
| HeapRegionBaseAddr
 
 
|-
 
|-
| 0x20
+
| 0xA0 || u32 || DebuggingFlags (bit0: can be debugged, bit1: can debug others)
| u64
 
| HeapRegionEndAddr
 
 
|-
 
|-
| 0x28
+
| 0xA4 || u32 || HandleTableSize
| u64
 
| HeapCurAddr
 
 
|-
 
|-
| 0x30
+
| 0xA8 || u32 ||
| u64
 
| MapRegionBaseAddr
 
 
|-
 
|-
| 0x38
+
| 0xAC || u32 ||
| u64
+
|}
| MapRegionEnd
+
 
 +
== KProcessHandleTable ==
 +
Size: 0x2A0
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Type
 +
! Description
 +
|-
 +
| 0 || [[#KHandleEntry]]* || TablePtr
 
|-
 
|-
| 0x40
+
| 8 || [[#KHandleEntry]]* || NextFreeEntry
| u64
 
| HeapMaxAllocation
 
 
|-
 
|-
| 0x48
+
| 0x10 || [[#KHandleEntry]][40] || InternalTable
| KRecursiveLock
 
| Mutex
 
 
|-
 
|-
| 0x50
+
| 0x290 || u16 || Size
|
 
|
 
 
|-
 
|-
| 0x60
+
| 0x292 || u16 ||
| [[#KMemoryBlock]]*
 
| MemoryBlockList
 
 
|-
 
|-
| ..
+
| 0x294 || u16 || IdCounter
| ..
+
|-
| ..
+
| 0x296 || u16 || NumActiveSlots
 +
|-
 +
| 0x298 || [[#KSpinLock]] || Lock
 
|}
 
|}
  
== KProcessCapabilities ==
+
=== KHandleEntry ===
Size: 0xB0
+
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Type
 +
! Description
 +
|-
 +
| 0 || u16 || HandleId
 +
|-
 +
| 2 || u8 || ObjectType
 +
|-
 +
| 8 || [[#KAutoObject]]* || Object
 +
|}
 +
 
 +
= KMemoryManager =
 +
Size: 0xB8
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 288: Line 246:
 
! Description
 
! Description
 
|-
 
|-
| 0
+
| 0 || * || Vtable
| u8[16]
 
| SvcAccessMask
 
 
|-
 
|-
| 0x10
+
| 8 || u64 || AddrSpaceMinAddr
| u8[128]
 
| IrqAccessMask
 
 
|-
 
|-
| 0x90
+
| 0x10 || u64 || AddrSpaceMaxAddr
| u64
 
| AllowedCpuIdBitmask
 
 
|-
 
|-
| 0x98
+
| 0x18 || u64 || HeapRegionBaseAddr
| u64
 
| AllowedThreadPrioBitmask
 
 
|-
 
|-
| 0xA0
+
| 0x20 || u64 || HeapRegionEndAddr
| u32
 
| DebuggingFlags (bit0: can be debugged, bit1: can debug others)
 
 
|-
 
|-
| 0xA4
+
| 0x28 || u64 || HeapCurAddr
| u32
 
| HandleTableSize
 
 
|-
 
|-
| 0xA8
+
| 0x30 || u64 || MapRegionBaseAddr
| u32
 
|
 
 
|-
 
|-
| 0xAC
+
| 0x38 || u64 || MapRegionEnd
| u32
+
|-
|
+
| 0x40 || u64 || HeapMaxAllocation
 +
|-
 +
| 0x48 || [[#KRecursiveLock]] || 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
 
|}
 
|}
  
== KProcessHandleTable ==
+
== KPageTable ==
Size: 0x2A0
+
Size: 0x10
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 330: Line 306:
 
! Description
 
! Description
 
|-
 
|-
| 0
+
| 0 || void* || RawPageTablePtr
| [[#KHandleEntry]]*
 
| TablePtr
 
|-
 
| 8
 
| [[#KHandleEntry]]*
 
| NextFreeEntry
 
|-
 
| 0x10
 
| [[#KHandleEntry]][40]
 
| InternalTable
 
|-
 
| 0x290
 
| u16
 
| Size
 
|-
 
| 0x292
 
| u16
 
|
 
|-
 
| 0x294
 
| u16
 
| IdCounter
 
 
|-
 
|-
| 0x296
+
| 8 || bool ||
| u16
 
| NumActiveSlots
 
 
|-
 
|-
| 0x298
+
| 0xC || u32 || AddrSpaceSizeInGb
| KSpinLock
 
| Lock
 
 
|}
 
|}
  
=== KHandleEntry ===
+
== KMemoryBlockManager ==
 +
Size: 0x18
 +
 
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 370: Line 322:
 
! Description
 
! Description
 
|-
 
|-
| 0
+
| 0 || [[#KMemoryBlock]]* || MemoryBlockList
| u16
 
| HandleId
 
 
|-
 
|-
| 2
+
| 8 || u64 || MaxAddr
| u8
 
| ObjectType
 
 
|-
 
|-
| 8
+
| 0x10 || u64 || MinAddr
| [[#KAutoObject]]*
 
| Object
 
 
|}
 
|}
  
Line 392: Line 338:
 
! Description
 
! Description
 
|-
 
|-
| 0
+
| 0 || [[#KLinkedListNode]]<[[#KMemoryBlock]]> || NodeFor__MemoryBlockList
| [[#KMemoryBlock]]*
 
| Next
 
 
|-
 
|-
| 8
+
| 0x10 || ||
| [[#KMemoryBlock]]*
 
| Prev
 
 
|-
 
|-
| 0x10
+
| 0x18 || ||
|  
 
|  
 
 
|-
 
|-
| 0x18
+
| 0x20 || u64 || BaseAddress
|  
 
|  
 
 
|-
 
|-
| 0x20
+
| 0x28 || u64 || NumOfPages
| u64
 
| BaseAddress
 
 
|-
 
|-
| 0x28
+
| 0x30 || u32 || State
| u64
 
| NumOfPages
 
 
|-
 
|-
| 0x30
+
| 0x34 || u16 || IpcRefCount [?]
| u32
 
| State
 
 
|-
 
|-
| 0x34
+
| 0x36 || u16 || DeviceMapRefCount
| u16
 
| IpcRefCount [?]
 
 
|-
 
|-
| 0x36
+
| 0x38 || u8 || Permission
| u16
 
| DeviceMapRefCount
 
 
|-
 
|-
| 0x38
+
| 0x39 || u8 || UnkAttribute
| u8
 
| Permission
 
 
|-
 
|-
| 0x39
+
| 0x3A || u8 || Attribute
| u8
 
| UnkAttribute
 
|-
 
| 0x3A
 
| u8
 
| Attribute
 
 
|}
 
|}
  
Line 450: Line 370:
 
! Description
 
! Description
 
|-
 
|-
| 0
+
| 0 || u64 || BaseAddress
| u64
 
| BaseAddress
 
|-
 
| 8
 
| u64
 
| Size
 
 
|-
 
|-
| 0x10
+
| 8 || u64 || Size
| u32
 
| State
 
 
|-
 
|-
| 0x14
+
| 0x10 || u32 || State
| u8
 
| Permission
 
 
|-
 
|-
| 0x15
+
| 0x14 || u8 || Permission
| u8
 
| Attribute
 
 
|-
 
|-
| 0x16
+
| 0x15 || u8 || Attribute
| u8
 
| UnkAttribute
 
 
|-
 
|-
|  
+
| 0x16 || u8 || UnkAttribute
|  
 
| Pad
 
 
|-
 
|-
| 0x18
+
| 0x18 || u16 || IpcRefCount [?]
| u16
 
| IpcRefCount [?]
 
 
|-
 
|-
| 0x1A
+
| 0x1A || u16 || DeviceMapRefCount
| u16
 
| DeviceMapRefCount
 
 
|}
 
|}
  
Line 498: Line 398:
 
! 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 || KRecursiveLock || Mutex
| KRecursiveLock
 
| Mutex
 
 
|-
 
|-
| 0x40
+
| 0x40 || int || Permission
| int
 
| Permission
 
 
|-
 
|-
| 0x44
+
| 0x44 || bool || HasInited
| bool
 
| HasInited
 
 
|-
 
|-
| 0x45
+
| 0x45 || bool || IsMapped
| bool
 
| IsMapped
 
 
|}
 
|}
  
Line 542: Line 426:
 
! Description
 
! Description
 
|-
 
|-
| 0
+
| 0 || [[#KAutoObject]] || Inheritance
| [[#KAutoObject]]
 
|
 
 
|-
 
|-
| 0x10
+
| 0x10 || KMemoryBlockList || Blocks
| KMemoryBlockList
 
| Blocks
 
 
|-
 
|-
| 0x28
+
| 0x28 || [[#KProcess]]* || OwnerProcess
| [[#KProcess]]*
 
| OwnerProcess
 
 
|-
 
|-
| 0x30
+
| 0x30 || int || LocalPermission
| int
 
| LocalPerm
 
 
|-
 
|-
| 0x34
+
| 0x34 || int || RemotePermission
| int
 
| RemotePerm
 
 
|-
 
|-
| 0x38
+
| 0x38 || bool || HasInited
| bool
 
| HasInited
 
 
|}
 
|}
  
Line 578: Line 450:
 
! Description
 
! Description
 
|-
 
|-
| 0
+
| 0 || [[#KAutoObject]] || Inheritance
| [[#KAutoObject]]
 
|
 
 
|-
 
|-
| 0x10
+
| 0x10 || [[#KServerPort]] || ServerSide
| [[#KServerPort]]
 
| ServerSide
 
 
|-
 
|-
| 0x60
+
| 0x60 || [[#KClientPort]] || ClientSide
| [[#KClientPort]]
 
| ClientSide
 
 
|-
 
|-
| 0x98
+
| 0x98 || u64 ||
| u64
 
|
 
 
|-
 
|-
| 0xA0
+
| 0xA0 || bool || HasInited
| bool
 
| HasInited
 
 
|-
 
|-
| 0xA1
+
| 0xA1 || bool || IsLight
| bool
 
| IsLight
 
 
|}
 
|}
  
Line 614: Line 474:
 
! 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 494:
 
! 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 514:
 
! 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 698: Line 534:
 
! Description
 
! Description
 
|-
 
|-
| 0
+
| 0 || [[#KSynchronizationObject]] || Inheritance
| [[#KSynchronizationObject]]
 
|
 
 
|-
 
|-
| 0x28
+
| 0x28 || KLinkedListNode ||  NodeFor__IncomingConnections
| KLinkedListNode
 
|  NodeFor__IncomingConnections
 
 
|-
 
|-
| 0x38
+
| 0x38 || ||
|
 
|
 
 
|-
 
|-
| 0x40
+
| 0x40 || KLinkedListNode ||
| KLinkedListNode
 
|
 
 
|-
 
|-
| 0x50
+
| 0x50 || ||
|
 
|
 
 
|-
 
|-
| 0x58
+
| 0x58 || ||
|
 
|
 
 
|}
 
|}
  
Line 734: Line 558:
 
! 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 582:
 
! 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 602:
 
! 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 622:
 
! 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 646:
 
! 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 668:
 
! Description
 
! Description
 
|-
 
|-
| 0
+
| 0 || [[#KSynchronizationObject]] || Inheritance
| [[#KSynchronizationObject]]
 
|
 
 
|-
 
|-
| 0x28
+
| 0x28 || bool ||
| bool
 
|
 
 
|-
 
|-
| 0x30
+
| 0x30 || [[#KEvent]]* || Parent
| [[#KEvent]]*
 
| Parent
 
 
|}
 
|}
  
Line 918: Line 686:
 
! Description
 
! Description
 
|-
 
|-
| 0
+
| 0 || [[#KAutoObject]] || Inheritance
| [[#KAutoObject]]
 
|
 
 
|-
 
|-
| 0x10
+
| 0x10 || [[#KEvent]]* || Parent
| [[#KEvent]]*
 
| Parent
 
 
|}
 
|}
  
Line 938: Line 702:
 
! Description
 
! Description
 
|-
 
|-
| 0
+
| 0 || [[#KReadableEvent]] || Inheritance
| [[#KReadableEvent]]
 
|
 
 
|-
 
|-
| 0x38
+
| 0x38 || ||
|
 
|
 
 
|-
 
|-
| 0x48
+
| 0x48 || u32 || IrqId (or -1)
| u32
 
| IrqId (or -1)
 
 
|}
 
|}
  
Line 962: Line 720:
 
! Description
 
! Description
 
|-
 
|-
| 0
+
| 0 || [[#KAutoObject]] || Inheritance
| [[#KAutoObject]]
 
|
 
 
|-
 
|-
| 0x10
+
| 0x10 || [[#KRecursiveLock]] || Mutex
| KRecursiveLock
 
| 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
 
 
|}
 
|}
  
Line 996: Line 742:
 
! Description
 
! Description
 
|-
 
|-
| 0
+
| 0 || u8[4] || PageTableAsids
| u8[4]
 
| PageTableAsids
 
 
|-
 
|-
| 8
+
| 8 || void*[4] || PageDirectories
| void*[4]
 
| PageDirectories
 
 
|-
 
|-
| 0x28
+
| 0x28 || u64 || AttachedDevicesMask
| u64
 
| AttachedDevicesMask
 
 
|-
 
|-
| 0x30
+
| 0x30 || u32 || RegVal32Bit
| u32
 
| RegVal32Bit
 
 
|-
 
|-
| 0x34
+
| 0x34 || u32 || RegVal32BitEmpty
| u32
 
| RegVal32BitEmpty
 
 
|-
 
|-
| 0x38
+
| 0x38 || u32 || RegVal36Bit
| u32
 
| RegVal36Bit
 
 
|-
 
|-
| 0x3C
+
| 0x3C || u32 || RegVal36BitEmpty
| u32
 
| RegVal36BitEmpty
 
 
|}
 
|}

Revision as of 02:56, 21 August 2017

KAutoObject

Size: 0x10

Offset Type Description
0 * Vtable
8 u64 ReferenceCount

KSynchronizationObject

Size: 0x28

Inherits from: #KAutoObject

Offset Type Description
0 #KAutoObject Inheritance
0x10 u64 ThreadSyncNum
0x18 #KLinkedListNode ThreadSyncList

KRecursiveLock

Size: 0x8

Offset Type Description
0 u64 OwnerTag

KSpinLock

Size: 0x1

Offset Type Description
0 u8 IsBusy

KLockedList

Size: 0x28

Offset Type Description
0 u64 Count
8 #KLinkedListNode List
0x18 #KRecursiveLock Mutex
0x20 u64 MaxCount

KLinkedListNode

Size: 0x10

Offset Type Description
0 #KLinkedListNode* Prev
8 #KLinkedListNode* Next

KProcess

Size: 0x5B0

Inherits from: #KSynchronizationObject

Offset Type Description
0 #KSynchronizationObject Inheritance
0x28
0x38 #KMemoryManager MemoryManager
0xF0 u64 TotalMemUsage
0xF8 u64 TlsPagesListCount
0x100 #KLinkedListNode TlsPagesList
0x110 s32 DefaultCpuCore
0x118 KDebug* Debug
0x120 #KResourceLimit* ResourceLimit
0x128 u32 State
0x130 #KRecursiveLock ProcessMutex
0x138 #KRecursiveLock ThreadingMutex
0x140 #KLinkedListNode<#KThread> ThreadArbiterList
0x150 KLinkedListNode
0x160 u64[4] RandomEntropy
0x180 u8 HasStateChanged
0x181 u8 HasInitialized
0x182 u8 IsSystem
0x183 u8[12] From_CreateProcessInfo_0
0x18F u8 InitiallyZero
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 u64 From_CreateProcessInfo_0xC
0x288 #KProcessHandleTable HandleTable
0x528 void* UsermodeExceptionTlsArea
0x530 #KLinkedListNode<#KThread> ExceptionThreadList
0x540 #KThread* ExceptionThread
0x548 #KLinkedListNode<#KThread> ThreadList
0x558 u32
0x55C u32 HasStarted
0x560 u64[8]
0x5A0 u64
0x5A8 u64

KProcessCapabilities

Size: 0xB0

Offset Type Description
0 u8[16] SvcAccessMask
0x10 u8[128] IrqAccessMask
0x90 u64 AllowedCpuIdBitmask
0x98 u64 AllowedThreadPrioBitmask
0xA0 u32 DebuggingFlags (bit0: can be debugged, bit1: can debug others)
0xA4 u32 HandleTableSize
0xA8 u32
0xAC u32

KProcessHandleTable

Size: 0x2A0

Offset Type Description
0 #KHandleEntry* TablePtr
8 #KHandleEntry* NextFreeEntry
0x10 #KHandleEntry[40] InternalTable
0x290 u16 Size
0x292 u16
0x294 u16 IdCounter
0x296 u16 NumActiveSlots
0x298 #KSpinLock Lock

KHandleEntry

Offset Type Description
0 u16 HandleId
2 u8 ObjectType
8 #KAutoObject* Object

KMemoryManager

Size: 0xB8

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 MapRegionEnd
0x40 u64 HeapMaxAllocation
0x48 #KRecursiveLock 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

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 KRecursiveLock Mutex
0x40 int Permission
0x44 bool HasInited
0x45 bool IsMapped

KSharedMemory

Size: 0x40

Inherits from: #KAutoObject

Offset Type Description
0 #KAutoObject Inheritance
0x10 KMemoryBlockList Blocks
0x28 #KProcess* OwnerProcess
0x30 int LocalPermission
0x34 int RemotePermission
0x38 bool HasInited

KPort

Size: 0xA8

Inherits from: #KAutoObject

Offset Type Description
0 #KAutoObject Inheritance
0x10 #KServerPort ServerSide
0x60 #KClientPort ClientSide
0x98 u64
0xA0 bool HasInited
0xA1 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
0x40 KLinkedListNode
0x50
0x58

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

Size: 0x50

Inherits from: #KReadableEvent

Offset Type Description
0 #KReadableEvent Inheritance
0x38
0x48 u32 IrqId (or -1)

KAddressSpace

Size: 0x70

Inherits from: #KAutoObject

Offset Type Description
0 #KAutoObject Inheritance
0x10 #KRecursiveLock Mutex
0x18 #KSmmuManager Manager
0x58 u64 BaseAddress
0x60 u64 Size
0x68 bool HasInited

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