SceSdstor: Difference between revisions
Jump to navigation
Jump to search
(→Module) |
(→Types) |
||
Line 59: | Line 59: | ||
void* mbr_ptr; //pointer to corresponding MBR record in array (offset 0x40) | void* mbr_ptr; //pointer to corresponding MBR record in array (offset 0x40) | ||
partition_entry partitions[17]; | partition_entry partitions[17]; | ||
uint16_t unk_234; | uint16_t unk_234; //some type flag (0, 1, 2) | ||
uint16_t unk_236; | uint16_t unk_236; | ||
}sdstor_mbr_ctx; | }sdstor_mbr_ctx; |
Revision as of 21:23, 27 February 2017
Module
SceSdstor module does not export any functions exсept module_start.
This module is responsible for initializing all storage devices. This includes:
- eMMC
- Game gard
- Memory card
- Usb Mass Storage (unknown SceUsbMassForDriver)
Based on layout of data segment and code of some subroutines (mbr table init, partition entry table init etc) it can be said that there are 5 devices in total. However only first 3 devices are known at the moment.
Known NIDs
Version | Name | World | Privilege | NID |
---|---|---|---|---|
1.69 | SceSdstor | Non-secure | Kernel | 0x5804A397 |
3.60 | SceSdstor | ? | Kernel | 0xD7FBAE7C |
Libraries
Known NIDs
Version | Name | World | Visibility | NID |
---|
Types
typedef struct partition_entry //size is 0x1C { uint32_t partitionOffset; uint32_t partitionSize; sdstor_mbr_ctx* ctx; void* partitionEntryPtr; //pointer to partition entry in MBR char* numericName; //null terminated name (000, 001, ...) unt8_t flags1; unt8_t flags2; uint16_t unk1; uint32_t unk2; }partition_entry; typedef struct sdstor_mbr_ctx //size is 0x238 { uint8_t unk_0[0x40]; uint32_t unk_40; sd_stor_device* unk_44; uint32_t unk_48; uint32_t unk_4C; uint32_t unk_50; void* mbr_ptr; //pointer to corresponding MBR record in array (offset 0x40) partition_entry partitions[17]; uint16_t unk_234; //some type flag (0, 1, 2) uint16_t unk_236; }sdstor_mbr_ctx; //named after "SceSdStorDevice" mutex typedef struct sd_stor_device //size is 0x54 { int unk_0; int unk_4; int unk_8; int unk_C; int unk_10; int unk_14; int unk_18; int unk_1C; int unk_20; int unk_24; int unk_28; int unk_2C; int unk_30; int unk_34; int unk_38; int unk_3C; char index1; // (0x00, 0x01, 0xFF, 0xFF, 0x03) char index2; // (0x00, 0x00, 0x02, 0x03, 0x01) char unk_42; char unk_43; int unk_44; int unk_48; int unk_4C; void* devCtx; //pointer to dev ctx (sd_context_part_mmc*) or zero }sd_stor_device;
Data segment layout
Address | Size | Description |
---|---|---|
0x0000 | 0x40 | unknown |
0x0040 | 0x200 | MBR of eMMC |
0x0240 | 0x200 | MBR of Game gard |
0x0440 | 0x200 | MBR of Memory card |
0x0640 | 0x200 | unknown (most likely for MBR since there are 5 elements in all arrays) |
0x0840 | 0x200 | unknown (most likely for MBR since there are 5 elements in all arrays) |
0x0A40 | 0x238 | sdstor_mbr_ctx element 0 |
0x0C78 | 0x238 | sdstor_mbr_ctx element 1 |
0x0EB0 | 0x238 | sdstor_mbr_ctx element 2 |
0x10E8 | 0x238 | sdstor_mbr_ctx element 3 |
0x1320 | 0x238 | sdstor_mbr_ctx element 4 |
0x1558 | 0x54 | sd_stor_device element 0 |
0x15AC | 0x54 | sd_stor_device element 1 |
0x1600 | 0x54 | sd_stor_device element 2 |
0x1654 | 0x54 | sd_stor_device element 3 |
0x16A8 | 0x54 | sd_stor_device element 4 |
0x16FC | 0x20 | vfs_add_data sdstor_dev_fs node
|
0x171C | 0x04 | SceUID of mempool "SceSdStorVfs" of size 0x2000 |
0x1720 | 0x200 | unknown (gcd-lp-act-mediaid ?) |
0x1920 | 0x200 | unknown (mcd-lp-act-mediaid ?) |
0x1B20 | 0xC8 | array of 5 structures of size 0x28 |
0x1BE8 | 0x8 | suspend_register_callback opt |
0x1BF0 | 0x3C | array of 5 structures of size 0xC |
0x1C2C | 0x8C | array of 5 structures of size 0x1C |
0x1CB8 | 0x8 | unknown |
0x1CC0 | 0x200 | MBR of Game gard |
SceSdstor
module_start
Version | NID |
---|---|
3.60 | 0x935cd196 |
int module_start();