Difference between revisions of "NSKBL"
CelesteBlue (talk | contribs) (→types) |
CelesteBlue (talk | contribs) (→Types) |
||
(8 intermediate revisions by the same user not shown) | |||
Line 64: | Line 64: | ||
int unk_0xB4; | int unk_0xB4; | ||
int unk_0xB8; // ex: 0x80 | int unk_0xB8; // ex: 0x80 | ||
− | + | sysroot_t *pSysroot; | |
void *unk_0xC0; | void *unk_0xC0; | ||
void *unk_0xC4; | void *unk_0xC4; | ||
Line 98: | Line 98: | ||
<source lang="C">int sceKblPutcharForKernel(void *args, char c);</source> | <source lang="C">int sceKblPutcharForKernel(void *args, char c);</source> | ||
− | === | + | === sceKernelPrintfForKernel === |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 108: | Line 108: | ||
In 3.60 this function is at 0x510137A9 | In 3.60 this function is at 0x510137A9 | ||
− | <source lang="C">int | + | <source lang="C">int sceKernelPrintfForKernel(const char *fmt, ...);</source> |
− | === | + | === sceKernelPrintfLevelForKernel === |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 118: | Line 118: | ||
|} | |} | ||
− | + | In 3.60 this function is at 0x51013841. | |
− | + | <source lang="C">int sceKernelPrintfLevelForKernel(int level, const char *fmt, ...);</source> | |
=== sceKblGetMinimumLogLevelForKernel === | === sceKblGetMinimumLogLevelForKernel === | ||
Line 146: | Line 146: | ||
<source lang="C">void *sceKblGetPutcharHandlerForKernel(void);</source> | <source lang="C">void *sceKblGetPutcharHandlerForKernel(void);</source> | ||
− | === | + | === sceKernelSysrootProcessmgrStart2ForKernel === |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 154: | Line 154: | ||
|} | |} | ||
− | + | In 3.60 this function is at 0x510123DD. | |
− | |||
− | In 3.60 this function is at 0x510123DD | ||
− | <source lang="C">int | + | <source lang="C">int sceKernelSysrootProcessmgrStart2ForKernel(void);</source> |
− | === | + | === sceKernelSysrootThreadMgrStartAfterProcessForKernel === |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 170: | Line 168: | ||
In 3.60 this function is at 0x510123A1. | In 3.60 this function is at 0x510123A1. | ||
− | <source lang="C">int | + | <source lang="C">int sceKernelSysrootThreadMgrStartAfterProcessForKernel(void);</source> |
− | === | + | === sceKernelSysrootIofilemgrStartForKernel === |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 182: | Line 180: | ||
In 3.60 this function is at 0x5101297D. | In 3.60 this function is at 0x5101297D. | ||
− | <source lang="C">int | + | <source lang="C">int sceKernelSysrootIofilemgrStartForKernel(void);</source> |
=== sceKblSysrootCpuCoreSyncAllForKernel === | === sceKblSysrootCpuCoreSyncAllForKernel === | ||
Line 224: | Line 222: | ||
<source lang="C">void sceKblCpuDisableIrqInterruptsForKernel(void);</source> | <source lang="C">void sceKblCpuDisableIrqInterruptsForKernel(void);</source> | ||
− | === | + | === sceSblAimgrIsCEXForKernel === |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 234: | Line 232: | ||
In 3.60 this function is at 0x510171B5. | In 3.60 this function is at 0x510171B5. | ||
− | <source lang="C">int | + | <source lang="C">int sceSblAimgrIsCEXForKernel(void);</source> |
− | === | + | === sceSblAimgrIsDiagForKernel === |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 246: | Line 244: | ||
In 3.60 this function is at 0x51017175. | In 3.60 this function is at 0x51017175. | ||
− | <source lang="C">int | + | <source lang="C">int sceSblAimgrIsDiagForKernel(void);</source> |
− | === | + | === sceSblAimgrIsDEXForKernel === |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 258: | Line 256: | ||
In 3.60 this function is at 0x51017159. | In 3.60 this function is at 0x51017159. | ||
− | <source lang="C">int | + | <source lang="C">int sceSblAimgrIsDEXForKernel(void);</source> |
− | === | + | === sceSblAimgrIsToolForKernel === |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 270: | Line 268: | ||
In 3.60 this function is at 0x51017139. | In 3.60 this function is at 0x51017139. | ||
− | <source lang="C">int | + | <source lang="C">int sceSblAimgrIsToolForKernel(void);</source> |
− | === | + | === sceSblAimgrIsTestForKernel === |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 282: | Line 280: | ||
In 3.60 this function is at 0x5101711D. | In 3.60 this function is at 0x5101711D. | ||
− | <source lang="C">int | + | <source lang="C">int sceSblAimgrIsTestForKernel(void);</source> |
− | === | + | === sceSblAimgrIsVITAForKernel === |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 294: | Line 292: | ||
In 3.60 this function is at 0x51017299. | In 3.60 this function is at 0x51017299. | ||
− | <source lang="C">int | + | <source lang="C">int sceSblAimgrIsVITAForKernel(void);</source> |
− | === | + | === sceSblAimgrIsDolceForKernel === |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 306: | Line 304: | ||
In 3.60 this function is at 0x510172A1. | In 3.60 this function is at 0x510172A1. | ||
− | <source lang="C">int | + | <source lang="C">int sceSblAimgrIsDolceForKernel(void);</source> |
− | === | + | === sceSblAimgrIsGenuineDolceForKernel === |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 318: | Line 316: | ||
In 3.60 this function is at 0x510171E5. | In 3.60 this function is at 0x510171E5. | ||
− | <source lang="C">int | + | <source lang="C">int sceSblAimgrIsGenuineDolceForKernel(void);</source> |
=== sceKblLoadModuleForKernel === | === sceKblLoadModuleForKernel === | ||
Line 374: | Line 372: | ||
<source lang="C">int sceKblSetNonSyncModuleStartForKernel(void);</source> | <source lang="C">int sceKblSetNonSyncModuleStartForKernel(void);</source> | ||
− | === | + | === sceKernelCpuIdForKernel === |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 384: | Line 382: | ||
In 3.60 this function is at 0x510147C9. | In 3.60 this function is at 0x510147C9. | ||
− | <source lang="C">int | + | <source lang="C">int sceKernelCpuIdForKernel(void);</source> |
− | === | + | === sceKernelCheckDipswForKernel === |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 396: | Line 394: | ||
In 3.60 this function is at 0x51015851. | In 3.60 this function is at 0x51015851. | ||
− | <source lang="C">int | + | <source lang="C">int sceKernelCheckDipswForKernel(int bit);</source> |
− | === | + | === sceSblQafManagerIsAllowKernelDebugForKernel === |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 405: | Line 403: | ||
| 3.60 || 0xCE94F329 | | 3.60 || 0xCE94F329 | ||
|} | |} | ||
− | |||
− | |||
In 3.60 this function is at 0x51016FD1 | In 3.60 this function is at 0x51016FD1 | ||
− | <source lang="C">int | + | <source lang="C">int sceSblQafManagerIsAllowKernelDebugForKernel(void);</source> |
=== sceKblGetHardwareFlagsForKernel === | === sceKblGetHardwareFlagsForKernel === |
Revision as of 21:13, 19 January 2021
NSKBL is a program that performs emmc setup, base kernel module loading, etc. during PSVita boot.
Module
The non-secure kernel bootloader contains an embedded and likely stripped version of SceSysmem, SceKernelModulemgr, SceSblSmschedProxy, SceExcpmgr, SceKernelIntrMgr, SceSblAuthMgr, SceProcessmgr (maybe), SceSdif, SceIofilemgr (Simple version?), and some other core drivers.
How to debug NSKBL
NSKBL supports sd0: for debugging.
sysroot->boot_type_indicator_1:0x40000 is required.
Types
/* Many pointers are NSKBL heap relationships */
typedef struct SceNskblSysrootInfo { // size is at least 0xC8 on FW 3.60
SceUID unk_0x00; // maybe some PID. ex: 0x10089
int unk_0x04;
void *unk_0x08;
void *unk_0x0C;
void *unk_0x10;
void *unk_0x14;
void *unk_0x18;
void *unk_0x1C;
void *unk_0x20;
void *unk_0x24;
void *unk_0x28;
void *unk_0x2C;
SceUID unk_0x30; // maybe some PID. ex: 0x1000B
const void *unk_0x34; // mapped paddr in vaddr
const void *unk_0x38; // mapped paddr in vaddr
void *unk_0x3C;
int unk_0x40; // ex: 0x80000000
int unk_0x44; // ex: 0x20000000
void *unk_0x48;
void *unk_0x4C;
void *unk_0x50;
void *unk_0x54;
void *unk_0x58;
void *unk_0x5C;
void *unk_0x60;
void *unk_0x64;
void *unk_0x68;
void *unk_0x6C;
void *unk_0x70;
void *unk_0x74;
void *unk_0x78;
void *unk_0x7C;
void *unk_0x80;
void *unk_0x84;
void *unk_0x88;
void *unk_0x8C;
void *unk_0x90;
void *unk_0x94;
void *unk_0x98;
SceUInt32 magic; // 0x 19442EA8
int unk_0xA0; // ex: 0x1000
int unk_0xA4; // ex: 0x1000
int unk_0xA8; // ex: 0x40000
int unk_0xAC; // ex: 0x200000
int unk_0xB0; // ex: 7
int unk_0xB4;
int unk_0xB8; // ex: 0x80
sysroot_t *pSysroot;
void *unk_0xC0;
void *unk_0xC4;
// more...?
} SceNskblSysrootInfo; // 3.60
SceNskblSysrootInfo *nskbl_sysroot_info = (SceNskblSysrootInfo *)(0x51000000 + 0x138980); // 3.60
Libraries
Known NIDs
Version | Name | World | Visibility | NID |
---|---|---|---|---|
3.60-3.65 | SceKblForKernel | Non-secure | Kernel | 0xD0FC2991 |
SceKblForKernel
sceKblPutcharForKernel
Version | NID |
---|---|
3.60 | 0x08E9FAEB |
In 3.60 this function is at 0x510172BD
int sceKblPutcharForKernel(void *args, char c);
sceKernelPrintfForKernel
Version | NID |
---|---|
3.60 | 0x13A5ABEF |
In 3.60 this function is at 0x510137A9
int sceKernelPrintfForKernel(const char *fmt, ...);
sceKernelPrintfLevelForKernel
Version | NID |
---|---|
3.60 | 0x752E7EEC |
In 3.60 this function is at 0x51013841.
int sceKernelPrintfLevelForKernel(int level, const char *fmt, ...);
sceKblGetMinimumLogLevelForKernel
Version | NID |
---|---|
3.60 | 0xC011935A |
In 3.60 this function is at 0x51013921.
int sceKblGetMinimumLogLevelForKernel(void);
sceKblGetPutcharHandlerForKernel
Version | NID |
---|---|
3.60 | 0x9B868276 |
In 3.60 this function is at 0x51013765.
void *sceKblGetPutcharHandlerForKernel(void);
sceKernelSysrootProcessmgrStart2ForKernel
Version | NID |
---|---|
3.60 | 0x161D6FCC |
In 3.60 this function is at 0x510123DD.
int sceKernelSysrootProcessmgrStart2ForKernel(void);
sceKernelSysrootThreadMgrStartAfterProcessForKernel
Version | NID |
---|---|
3.60 | 0x1DB28F02 |
In 3.60 this function is at 0x510123A1.
int sceKernelSysrootThreadMgrStartAfterProcessForKernel(void);
sceKernelSysrootIofilemgrStartForKernel
Version | NID |
---|---|
3.60 | 0xC7B77991 |
In 3.60 this function is at 0x5101297D.
int sceKernelSysrootIofilemgrStartForKernel(void);
sceKblSysrootCpuCoreSyncAllForKernel
Version | NID |
---|---|
3.60 | 0x314AA770 |
In 3.60 this function is at 0x510124FD.
void sceKblSysrootCpuCoreSyncAllForKernel(void);
sceKblSysrootCpuCoreSyncWaitForKernel
Version | NID |
---|---|
3.60 | 0x807B4437 |
same to SceSysrootForKernel_8E4B61F1
In 3.60 this function is at 0x510124E5.
void sceKblSysrootCpuCoreSyncWaitForKernel(int core);
sceKblCpuDisableIrqInterruptsForKernel
Version | NID |
---|---|
3.60 | 0xDDB3A1A8 |
In 3.60 this function is at 0x51003554.
Old wrong name is sceKblCpuSwitchInterruptsForKernel.
void sceKblCpuDisableIrqInterruptsForKernel(void);
sceSblAimgrIsCEXForKernel
Version | NID |
---|---|
3.60 | 0x8A416887 |
In 3.60 this function is at 0x510171B5.
int sceSblAimgrIsCEXForKernel(void);
sceSblAimgrIsDiagForKernel
Version | NID |
---|---|
3.60 | 0xC3DDDE15 |
In 3.60 this function is at 0x51017175.
int sceSblAimgrIsDiagForKernel(void);
sceSblAimgrIsDEXForKernel
Version | NID |
---|---|
3.60 | 0x5945F065 |
In 3.60 this function is at 0x51017159.
int sceSblAimgrIsDEXForKernel(void);
sceSblAimgrIsToolForKernel
Version | NID |
---|---|
3.60 | 0xB6C9ACF1 |
In 3.60 this function is at 0x51017139.
int sceSblAimgrIsToolForKernel(void);
sceSblAimgrIsTestForKernel
Version | NID |
---|---|
3.60 | 0x943E7537 |
In 3.60 this function is at 0x5101711D.
int sceSblAimgrIsTestForKernel(void);
sceSblAimgrIsVITAForKernel
Version | NID |
---|---|
3.60 | 0x838466E9 |
In 3.60 this function is at 0x51017299.
int sceSblAimgrIsVITAForKernel(void);
sceSblAimgrIsDolceForKernel
Version | NID |
---|---|
3.60 | 0xA7BD4417 |
In 3.60 this function is at 0x510172A1.
int sceSblAimgrIsDolceForKernel(void);
sceSblAimgrIsGenuineDolceForKernel
Version | NID |
---|---|
3.60 | 0xB6D00D6D |
In 3.60 this function is at 0x510171E5.
int sceSblAimgrIsGenuineDolceForKernel(void);
sceKblLoadModuleForKernel
Version | NID |
---|---|
3.60 | 0x6D7A1F18 |
In 3.60 this function is at 0x51001551.
typedef struct SceModuleLoadList {
const char *filename;
} __attribute__((packed)) SceModuleLoadList;
int sceKblLoadModuleForKernel(const SceModuleLoadList *list, SceUID *uid, int count, int some_flag);
sceKblStartModuleForKernel
Version | NID |
---|---|
3.60 | 0x9A92436E |
In 3.60 this function is at 0x51001571
int sceKblStartModuleForKernel(SceUID *uid_list, int count, SceSize args, void *argp);
sceKblAuthMgrCloseForKernel
Version | NID |
---|---|
3.60 | 0x79241ACF |
In 3.60 this function is at 0x51001345.
int sceKblAuthMgrCloseForKernel(void);
sceKblSetNonSyncModuleStartForKernel
Version | NID |
---|---|
3.60 | 0x9F4F3F98 |
In 3.60 this function is at 0x51001561.
int sceKblSetNonSyncModuleStartForKernel(void);
sceKernelCpuIdForKernel
Version | NID |
---|---|
3.60 | 0xB506A10E |
In 3.60 this function is at 0x510147C9.
int sceKernelCpuIdForKernel(void);
sceKernelCheckDipswForKernel
Version | NID |
---|---|
3.60 | 0xC8F4DE71 |
In 3.60 this function is at 0x51015851.
int sceKernelCheckDipswForKernel(int bit);
sceSblQafManagerIsAllowKernelDebugForKernel
Version | NID |
---|---|
3.60 | 0xCE94F329 |
In 3.60 this function is at 0x51016FD1
int sceSblQafManagerIsAllowKernelDebugForKernel(void);
sceKblGetHardwareFlagsForKernel
Version | NID |
---|---|
3.60 | 0xD3A516D5 |
get some device flags function
In 3.60 this function is at 0x510128AD
typedef struct SceSysrootHardwareFlags {
uint32_t data[4];
} __attribute__((packed)) SceSysrootHardwareFlags;
int sceKblGetHardwareFlagsForKernel(SceSysrootHardwareFlags *data);
sceKblInitDeviceForKernel
Version | NID |
---|---|
3.60 | 0xF7AF8690 |
some device init function
In 3.60 this function is at 0x5100124D.
int sceKblInitDeviceForKernel(void);
sceKblFreeFileSystemCtxForKernel
Version | NID |
---|---|
3.60 | 0x261F2747 |
In 3.60 this function is at 0x51001321.
int sceKblFreeFileSystemCtxForKernel(void);