Skip to content

Instantly share code, notes, and snippets.

@TuxSH
Created November 1, 2016 21:18
Show Gist options
  • Save TuxSH/deb0d42d8cd2d11655b8e85953845b77 to your computer and use it in GitHub Desktop.
Save TuxSH/deb0d42d8cd2d11655b8e85953845b77 to your computer and use it in GitHub Desktop.
System format RE
int __fastcall FSPXI_InitializeCTRFileSystem_internal(int a1, int a2)
{
int v2; // r4@1
int v3; // r2@1
int v4; // r1@1
int *v5; // r5@1
char *v6; // r0@1
_DWORD *v7; // r6@1
int (__fastcall *v8)(_DWORD); // r4@3
int v9; // r4@4
int result; // r0@7
_DWORD *v11; // r1@11
int v12; // r0@11
int v13; // r3@11
int v14; // [sp+0h] [bp-48h]@3
int val; // [sp+4h] [bp-44h]@10
int v16; // [sp+10h] [bp-38h]@1
int v17; // [sp+14h] [bp-34h]@1
int v18; // [sp+18h] [bp-30h]@1
int v19; // [sp+1Ch] [bp-2Ch]@3
int v20; // [sp+28h] [bp-20h]@4
int v21; // [sp+2Ch] [bp-1Ch]@1
int v22; // [sp+30h] [bp-18h]@1
v21 = a1;
v22 = a2;
v2 = *(_DWORD *)a1;
v3 = *(_DWORD *)(a1 + 8);
v4 = *(_DWORD *)(a1 + 4);
v5 = (int *)a1;
v6 = (char *)off_802CF2C;
v16 = v2;
v18 = v3;
v17 = v4;
v7 = (_DWORD *)(((signed int)off_802CF2C[1] >> 1) + v2);
if ( (_DWORD)off_802CF2C[1] << 31 )
v6 = (char *)*off_802CF2C + *v7;
v8 = *(int (__fastcall **)(_DWORD))v6;
v14 = 0;
v19 = v8(v7);
if ( v19 )
{
OpenFile(&v20, aPrivate_0);
StoreFilePath((int)&v14, *(_WORD **)(v20 + 4));
v9 = sub_805C270(v19);
if ( v9 >= 0 )
v9 = 0;
CloseFile((_DWORD **)&v20);
}
else
{
v9 = dword_802CF44;
}
sub_8060D98((int)&v16);
result = v9;
if ( v9 >= 0 )
{
result = LocalFriendSeedStuff((int)v5, (int)off_802CF3C);
if ( result >= 0 )
{
if ( v22 )
{
result = generateRandomBytes(&val, 4u);
if ( result < 0 )
return result;
v11 = off_802CF40;
v12 = val + 1;
*((_DWORD *)off_802CF40 + 8) = val + 1;
v13 = v11[6];
v11[7] += __CFADD__(v13, v12);
v11[6] = v13 + v12;
}
updateMovableSedCMAC(off_802CF3C);
if ( VerifyMovableSed(off_802CF3C) )
{
result = sub_805DE34(v5, (int)off_802CF3C, 1);
if ( result >= 0 )
result = 0;
}
else
{
result = dword_802CF48;
}
}
}
return result;
}
RAM:0802CE5C ; =============== S U B R O U T I N E =======================================
RAM:0802CE5C
RAM:0802CE5C
RAM:0802CE5C FSPXI_InitializeCTRFileSystem_internal ; CODE XREF: sub_802B2BC+74p
RAM:0802CE5C ; FSPXI_InitializeCTRFileSystem+12p
RAM:0802CE5C
RAM:0802CE5C var_48 = -0x48
RAM:0802CE5C val = -0x44
RAM:0802CE5C var_38 = -0x38
RAM:0802CE5C var_34 = -0x34
RAM:0802CE5C var_30 = -0x30
RAM:0802CE5C var_2C = -0x2C
RAM:0802CE5C var_20 = -0x20
RAM:0802CE5C var_18 = -0x18
RAM:0802CE5C
RAM:0802CE5C PUSH {R0,R1,R4-R7,LR}
RAM:0802CE5E LDR R4, [R0]
RAM:0802CE60 LDR R2, [R0,#8]
RAM:0802CE62 LDR R1, [R0,#4]
RAM:0802CE64 SUB SP, SP, #0x2C
RAM:0802CE66 MOVS R5, R0
RAM:0802CE68 LDR R0, =off_808EB10
RAM:0802CE6A STR R4, [SP,#0x48+var_38]
RAM:0802CE6C STR R2, [SP,#0x48+var_30]
RAM:0802CE6E STR R1, [SP,#0x48+var_34]
RAM:0802CE70 LDR R6, [R0,#(dword_808EB14 - 0x808EB10)]
RAM:0802CE72 MOVS R7, #0
RAM:0802CE74 ASRS R6, R6, #1
RAM:0802CE76 ADDS R6, R6, R4
RAM:0802CE78 LDR R4, [R0,#(dword_808EB14 - 0x808EB10)]
RAM:0802CE7A MOVS R3, R7
RAM:0802CE7C LSLS R4, R4, #0x1F
RAM:0802CE7E BEQ loc_802CE86
RAM:0802CE80 LDR R0, [R0]
RAM:0802CE82 LDR R4, [R6]
RAM:0802CE84 ADDS R0, R4, R0
RAM:0802CE86
RAM:0802CE86 loc_802CE86 ; CODE XREF: FSPXI_InitializeCTRFileSystem_internal+22j
RAM:0802CE86 LDR R4, [R0]
RAM:0802CE88 MOVS R0, R6
RAM:0802CE8A STR R7, [SP,#0x48+var_48]
RAM:0802CE8C BLX R4
RAM:0802CE8E CMP R0, #0
RAM:0802CE90 STR R0, [SP,#0x48+var_2C]
RAM:0802CE92 BEQ loc_802CF22
RAM:0802CE94 ADR R1, aPrivate_0 ; "/private"
RAM:0802CE96 ADD R0, SP, #0x48+var_20
RAM:0802CE98 BL OpenFile
RAM:0802CE9C LDR R0, [SP,#0x48+var_20]
RAM:0802CE9E MOVS R4, #0
RAM:0802CEA0 LDR R1, [R0,#4]
RAM:0802CEA2 MOV R0, SP
RAM:0802CEA4 BL StoreFilePath
RAM:0802CEA8 MOVS R2, R0
RAM:0802CEAA MOVS R3, R4
RAM:0802CEAC LDR R0, [SP,#0x48+var_2C]
RAM:0802CEAE MOVS R1, R3
RAM:0802CEB0 BL sub_805C270
RAM:0802CEB4 SUBS R4, R0, #0
RAM:0802CEB6 BLT loc_802CEBA
RAM:0802CEB8 MOVS R4, #0
RAM:0802CEBA
RAM:0802CEBA loc_802CEBA ; CODE XREF: FSPXI_InitializeCTRFileSystem_internal+5Aj
RAM:0802CEBA ADD R0, SP, #0x48+var_20
RAM:0802CEBC BL CloseFile
RAM:0802CEC0
RAM:0802CEC0 loc_802CEC0 ; CODE XREF: FSPXI_InitializeCTRFileSystem_internal+C8j
RAM:0802CEC0 ADD R0, SP, #0x48+var_38
RAM:0802CEC2 BL sub_8060D98
RAM:0802CEC6 SUBS R0, R4, #0
RAM:0802CEC8 BLT loc_802CF1E
RAM:0802CECA LDR R1, =movableSedData ; data
RAM:0802CECC MOVS R0, R5 ; a1
RAM:0802CECE BL InitMovableSedAndCopyLocalFriendSeed ; movable.sed is cleared to 0?
RAM:0802CED2 CMP R0, #0
RAM:0802CED4 BLT loc_802CF1E
RAM:0802CED6 LDR R0, [SP,#0x48+var_18]
RAM:0802CED8 CMP R0, #0
RAM:0802CEDA BEQ loc_802CEFE
RAM:0802CEDC MOVS R1, #4 ; size
RAM:0802CEDE ADD R0, SP, #0x48+val ; randomBytes
RAM:0802CEE0 BL generateRandomBytes
RAM:0802CEE4 CMP R0, #0
RAM:0802CEE6 BLT loc_802CF1E
RAM:0802CEE8 LDR R0, [SP,#0x48+val]
RAM:0802CEEA LDR R1, =(movableSedData.signature+0xF8)
RAM:0802CEEC ADDS R0, R0, #1
RAM:0802CEEE STR R0, [R1,#(movableSedData.randomword - 0x80DD920)]
RAM:0802CEF0 LDR R3, [R1,#(movableSedData.keyYHigh - 0x80DD920)]
RAM:0802CEF2 LDR R2, [R1,#(movableSedData.keyYHigh+4 - 0x80DD920)]
RAM:0802CEF4 MOVS R4, #0
RAM:0802CEF6 ADDS R0, R3, R0 ; (u64) highKeyY += <random u32> + 1
RAM:0802CEF8 ADCS R2, R4
RAM:0802CEFA STR R2, [R1,#(movableSedData.keyYHigh+4 - 0x80DD920)]
RAM:0802CEFC STR R0, [R1,#(movableSedData.keyYHigh - 0x80DD920)]
RAM:0802CEFE
RAM:0802CEFE loc_802CEFE ; CODE XREF: FSPXI_InitializeCTRFileSystem_internal+7Ej
RAM:0802CEFE LDR R0, =movableSedData ; data
RAM:0802CF00 BL updateMovableSedCMAC
RAM:0802CF04 LDR R0, =movableSedData ; data
RAM:0802CF06 BL VerifyMovableSed
RAM:0802CF0A CMP R0, #0
RAM:0802CF0C BEQ loc_802CF26
RAM:0802CF0E LDR R1, =movableSedData
RAM:0802CF10 MOVS R2, #1
RAM:0802CF12 MOVS R0, R5
RAM:0802CF14 BL sub_805DE34
RAM:0802CF18 CMP R0, #0
RAM:0802CF1A BLT loc_802CF1E
RAM:0802CF1C MOVS R0, #0
RAM:0802CF1E
RAM:0802CF1E loc_802CF1E ; CODE XREF: FSPXI_InitializeCTRFileSystem_internal+6Cj
RAM:0802CF1E ; FSPXI_InitializeCTRFileSystem_internal+78j ...
RAM:0802CF1E ADD SP, SP, #0x34
RAM:0802CF20 POP {R4-R7,PC}
RAM:0802CF22 ; ---------------------------------------------------------------------------
RAM:0802CF22
RAM:0802CF22 loc_802CF22 ; CODE XREF: FSPXI_InitializeCTRFileSystem_internal+36j
RAM:0802CF22 LDR R4, =0xC8A044DC
RAM:0802CF24 B loc_802CEC0
RAM:0802CF26 ; ---------------------------------------------------------------------------
RAM:0802CF26
RAM:0802CF26 loc_802CF26 ; CODE XREF: FSPXI_InitializeCTRFileSystem_internal+B0j
RAM:0802CF26 LDR R0, =0xD9004586
RAM:0802CF28 B loc_802CF1E
RAM:0802CF28 ; End of function FSPXI_InitializeCTRFileSystem_internal
RAM:0802CF28
RAM:0802CF28 ; ---------------------------------------------------------------------------
RAM:0802CF2A DCB 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment