/* opm 25.0.0.69 (1b85ada0) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: opm_25.0.4.48_ea9026f1.elf * functions: 54 total in build, 39 named, 15 anonymous * porting tiers: {"DISPATCH": 7, "EXACT": 10, "FUZZY": 1, "MNEM": 6, "ambiguous": 4, "cmd_protos": 4, "comments": 0, "dispatch_conflict": 0, "none": 26, "protos": 4, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same * function lines up across versions. See the .index.json sidecar for * name -> address. * * CAUTION on ported names: a name is only an identity claim at tier=EXACT. * At tier=MNEM/FUZZY the bytes differ from the reference, so any ADDRESS or * CONTENT HASH embedded in the name (e.g. *_4025F8, gcp_lib__*) still * refers to the REFERENCE build and does not describe this one. */ /* These did not match the reference above the 0.90 similarity floor and are * deliberately left unnamed rather than guessed. Ordered by size then body * hash, because sub_* numbering is not stable across builds. */ /* ==== ANON size=8 ==== */ void __fastcall sub_409678(int a1, int _R1, int *a3) { int v3; // r0 unsigned int v9; // r0 int v10; // r7 int v11; // r3 int v12; // r6 __int16 v13; // r3 _DWORD *v14; // r2 int v15; // r3 unsigned int v16; // r4 unsigned int v17; // r6 int v18; // r7 int v19; // r5 unsigned int v20; // r4 _DWORD *v21; // r4 int v22; // r2 int v23; // r3 int v24; // r5 int v25; // r7 unsigned int v26; // r10 int v27; // lr char *v28; // r5 int v30; // [sp+D4h] [bp-108h] v28 = *(char **)((char *)a3 + a1); while ( 1 ) { v9 = a1 + 118; v10 = (int)off_409478; v11 = *(_DWORD *)(v9 + 104) - 134; *(_DWORD *)&v28[(_DWORD)a3] = off_409478; v12 = v10 >> 6; v13 = v11 + 169; __asm { LDCL p1, c3, [PC], {0xDC} } if ( (unsigned int)v28 > 0x2D ) break; *(_DWORD *)v10 = _R1; v15 = *a3; v16 = a3[1]; v17 = a3[2]; v18 = a3[3]; v14 = a3 + 4; *((_WORD *)v14 + 8) = _R1; v19 = *(unsigned __int8 *)(v15 + 4); __mcr(0, 3, v16, 2, 10, 0); v20 = v17 >> 25; STACK[0x35C] = v9; if ( v18 != 0 ) { MEMORY[0xC] = *(_WORD *)(*(unsigned __int8 *)(v15 + 10) + v18); *((_BYTE *)v14 + 4) = v20 - 76; JUMPOUT(0x4094BC); } __asm { STC p9, c15, [R4,#0x218] } *(_BYTE *)(*(unsigned __int8 *)(v15 + 10) + 0x16) = v17; __mcr(14, 4, v26, 8, 13, 0); __asm { SVC 0x5B ; '[' } _VF = __OFADD__(v20, 128); v21 = (_DWORD *)(v20 + 128); v22 = v21[1]; v23 = *(_DWORD *)(v21[3] + 116); v24 = *(_DWORD *)(*(unsigned __int8 *)((v19 >> 5) + 0x1F) - 215 + v30); if ( !_VF ) { *(_WORD *)(v22 + v24) = v24; JUMPOUT(0x4093D8); } v3 = v23 - 6; if ( v23 >= 6 ) { *(_DWORD *)(2 * v23) = v3; __udf(0x67u); } _T1 = *(_DWORD *)(v27 - 156); v27 -= 156; __asm { LDC p1, c13, [LR,#-0x9C]! } a3 = *(int **)(v22 + 124); v28 = (char *)off_4096A0; _R1 = *(_DWORD *)(v3 + *v21); *(_BYTE *)(_R1 + 20) = _R1; a1 = dword_40946C; } *(_BYTE *)(v10 + 26) = (_BYTE)v28; *(_WORD *)((v10 >> 6) + 0x26) = v13; v25 = dword_409500; __asm { STC p6, c7, [R11,#0x1C4]! } a3[30] = (int)a3; if ( !__OFSUB__(v25, 102) ) { __cdp(0, 9, 10, 1, 2, 6); __asm { LDCVC p14, c3, [R1,#-0x1A4]! } } *(_WORD *)(v12 + 34) = v25; __asm { POP {R0-R5,PC} } } /* ==== ANON size=26 ==== */ int __fastcall sub_4030BA(char *a1, char *a2, int a3) { unsigned __int8 v3; // r3 char v4; // r4 char v5; // t1 char v6; // t1 v3 = 0; while ( a3 != 0 ) { v5 = *a1++; v4 = v5; --a3; v6 = *a2++; v3 |= v4 ^ v6; } return v3; } /* ==== ANON size=38 ==== */ int sub_40325C() { _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } return 2; } /* ==== ANON size=46 ==== */ int sub_4031F2() { _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } return 2; } /* ==== ANON size=46 ==== */ int __fastcall sub_402594(int a1, int a2) { int v2; // r4 void (__cdecl *v3)(); // r5 if ( a1 != 0 && a2 == 32 ) { v2 = 0; *(_DWORD *)(a1 + 20) = 0; } else { v3 = (void (__cdecl *)())off_4025C4; off_4025C4(a1: 7, a2: 61440); v3(); v2 = 264; v3(); } return v2; } /* ==== ANON size=66 ==== */ int __fastcall sub_402274(int a1, int a2) { int result; // r0 if ( a2 == 0 ) return 264; if ( a1 != 0 ) { if ( a1 != 1 ) return 260; result = sub_402750(a1: a2); } else { result = sub_4025C8(a1: a2); } if ( result == 0 ) { result = opm_sysdrv_rpc_201(); if ( result == 0 ) { result = *(_DWORD *)(a2 + 36) - 2048; if ( *(_DWORD *)(a2 + 36) != 2048 ) return 272; } } return result; } /* ==== ANON size=88 ==== */ int __fastcall sub_401A54(int a1, int *a2) { int result; // r0 int v5; // r1 bool v6; // zf int v7; // [sp+0h] [bp-28h] BYREF int v8; // [sp+4h] [bp-24h] int v9; // [sp+8h] [bp-20h] if ( a2 == nullptr ) return 264; opm_lib_zero_fill_words(result: &v7, a2: 0x28u); result = opm_sysdrv_rpc_200(); if ( result == 0 ) { if ( a1 == 1 ) { if ( (unsigned int)(v8 - 1) < 2 ) goto LABEL_14; v6 = v8 == 7; if ( v8 != 7 ) v6 = v8 == 4; if ( v6 && v9 == 1 ) LABEL_14: v5 = 6431; else v5 = 6340; } else if ( a1 != 0 ) { v5 = 0; } else { v5 = 3972; } *a2 = v5; } return result; } /* ==== ANON size=130 ==== */ int __fastcall sub_4021E8(int a1, unsigned int a2, int a3, int a4) { int v4; // r4 int v5; // r5 void (__cdecl *v6)(); // r5 if ( a1 == 0 ) { v4 = 264; goto LABEL_15; } if ( a2 > 0x3F ) { v4 = 259; LABEL_15: v6 = (void (__cdecl *)())off_4025C4; off_4025C4(a1: 7, a2: 61440); v6(); v6(); return v4; } if ( (*off_402590)[22 * a2] != 3 ) { v4 = 266; goto LABEL_15; } v5 = (*off_402590)[22 * a2 + 1]; if ( a4 != 0 ) { if ( v5 != 0 ) { *(_DWORD *)(a1 + 13340) = dword_402514; v4 = 260; goto LABEL_15; } } else if ( v5 != 1 ) { v4 = 260; *(_DWORD *)(a1 + 13340) = dword_402514 + 3; goto LABEL_15; } if ( (*off_402590)[22 * a2 + 10] != a3 ) { v4 = 261; goto LABEL_15; } return 0; } /* ==== ANON size=132 ==== */ int __fastcall sub_4019C0(int a1, unsigned int a2, struct tee_fmt_state *a3, unsigned int *a4) { int result; // r0 int v9; // r3 bool v10; // zf unsigned int v11; // r7 void *v12; // r1 int v13; // [sp+0h] [bp-28h] BYREF int v14; // [sp+4h] [bp-24h] int v15; // [sp+8h] [bp-20h] int v16; // [sp+Ch] [bp-1Ch] int v17; // [sp+10h] [bp-18h] int v18; // [sp+14h] [bp-14h] int v19; // [sp+18h] [bp-10h] int v20; // [sp+1Ch] [bp-Ch] int v21; // [sp+20h] [bp-8h] result = 264; if ( a3 != nullptr && a4 != nullptr ) { opm_lib_zero_fill_words(result: &v13, a2: 0x28u); result = opm_sysdrv_rpc_200(); if ( result == 0 ) { if ( (unsigned int)(v14 - 1) < 2 ) goto LABEL_10; v10 = v14 == 7; if ( v14 != 7 ) v10 = v14 == 4; if ( v10 && v15 == 1 ) { LABEL_10: if ( a1 == 0 ) { v11 = 3972; v12 = off_401A44; goto LABEL_18; } if ( a1 == 1 ) { v11 = 6431; v12 = (void *)dword_401A48; LABEL_18: if ( v11 > a2 ) return 257; opm_lib_thunk_tailjump( a1: a3, a2: (int)v12, a3: v11, a4: v9, a5: v13, a6: v14, a7: v15, a8: v16, a9: v17, a10: v18, a11: v19, a12: v20, a13: v21); *a4 = v11; } } else { if ( a1 == 0 ) { v11 = 3972; v12 = off_401A4C; goto LABEL_18; } if ( a1 == 1 ) { v12 = (void *)dword_401A50; v11 = 6340; goto LABEL_18; } } return 0; } } return result; } /* ==== ANON size=254 ==== */ int __fastcall sub_4025C8(int *a1) { int result; // r0 int v3; // r3 int *v4; // r1 _DWORD v5[2]; // [sp+0h] [bp-28h] BYREF int v6; // [sp+8h] [bp-20h] opm_lib_zero_fill_words(result: v5, a2: 0x28u); result = opm_sysdrv_rpc_200(); if ( result == 0 ) { result = 272; switch ( v5[1] ) { case 1: goto LABEL_6; case 2: goto LABEL_11; case 3: v4 = (int *)off_402738; goto LABEL_41; case 4: if ( v6 == 2 ) v4 = (int *)off_40274C; else LABEL_6: v4 = (int *)dword_402748; goto LABEL_41; case 5: v4 = (int *)dword_402740; goto LABEL_41; case 6: v4 = (int *)off_402734; goto LABEL_41; case 7: if ( v6 == 2 ) v4 = (int *)off_402744; else LABEL_11: v4 = (int *)off_40273C; goto LABEL_41; case 8: v4 = (int *)off_40272C; goto LABEL_41; case 9: v4 = (int *)off_402704; goto LABEL_41; case 0xB: v4 = (int *)off_402730; goto LABEL_41; case 0xC: v4 = (int *)dword_402728; goto LABEL_41; case 0xE: v4 = (int *)off_4026D4; goto LABEL_41; case 0xF: v4 = (int *)off_402724; goto LABEL_41; case 0x10: v4 = (int *)off_402700; goto LABEL_41; case 0x11: v4 = (int *)off_402720; goto LABEL_41; case 0x12: if ( v6 == 2 ) v4 = (int *)off_4026FC; else v4 = (int *)dword_4026F8; goto LABEL_41; case 0x13: v4 = (int *)off_40271C; goto LABEL_41; case 0x14: v4 = (int *)off_402718; goto LABEL_41; case 0x15: v4 = (int *)off_4026F4; goto LABEL_41; case 0x16: if ( v6 == 2 ) goto LABEL_36; v4 = (int *)off_4026EC; goto LABEL_41; case 0x17: v4 = (int *)off_4026F0; goto LABEL_41; case 0x18: v4 = (int *)off_402710; goto LABEL_41; case 0x19: v4 = (int *)off_402714; goto LABEL_41; case 0x1A: v4 = (int *)off_4026E0; goto LABEL_41; case 0x1B: LABEL_36: v4 = (int *)off_4026E8; goto LABEL_41; case 0x1C: v4 = (int *)off_4026E4; goto LABEL_41; case 0x1D: v4 = (int *)off_40270C; goto LABEL_41; case 0x1E: v4 = (int *)dword_402708; goto LABEL_41; case 0x1F: v4 = (int *)off_4026DC; goto LABEL_41; case 0x20: v4 = (int *)off_4026D8; goto LABEL_41; case 0x21: v4 = (int *)dword_4026D0; goto LABEL_41; case 0x22: v4 = (int *)off_4026CC; goto LABEL_41; case 0x23: v4 = (int *)off_4026C8; LABEL_41: opm_memcpy_aligned(result: a1, a2: v4, a3: 0x4C0u, a4: v3); result = 0; break; default: return result; } } return result; } /* ==== ANON size=254 ==== */ int __fastcall sub_402750(int *a1) { int result; // r0 int v3; // r3 int *v4; // r1 _DWORD v5[2]; // [sp+0h] [bp-28h] BYREF int v6; // [sp+8h] [bp-20h] opm_lib_zero_fill_words(result: v5, a2: 0x28u); result = opm_sysdrv_rpc_200(); if ( result == 0 ) { result = 272; switch ( v5[1] ) { case 1: goto LABEL_6; case 2: goto LABEL_11; case 3: v4 = (int *)off_4028C0; goto LABEL_41; case 4: if ( v6 == 2 ) v4 = (int *)dword_4028D4; else LABEL_6: v4 = (int *)off_4028D0; goto LABEL_41; case 5: v4 = (int *)off_4028C8; goto LABEL_41; case 6: v4 = (int *)off_4028BC; goto LABEL_41; case 7: if ( v6 == 2 ) v4 = (int *)off_4028CC; else LABEL_11: v4 = (int *)off_4028C4; goto LABEL_41; case 8: v4 = (int *)dword_4028B4; goto LABEL_41; case 9: v4 = (int *)off_40288C; goto LABEL_41; case 0xB: v4 = (int *)off_4028B8; goto LABEL_41; case 0xC: v4 = (int *)off_4028B0; goto LABEL_41; case 0xE: v4 = (int *)off_40285C; goto LABEL_41; case 0xF: v4 = (int *)dword_4028AC; goto LABEL_41; case 0x10: v4 = (int *)off_402888; goto LABEL_41; case 0x11: v4 = (int *)off_4028A8; goto LABEL_41; case 0x12: if ( v6 == 2 ) v4 = (int *)off_402884; else v4 = (int *)dword_402880; goto LABEL_41; case 0x13: v4 = (int *)off_4028A4; goto LABEL_41; case 0x14: v4 = (int *)off_4028A0; goto LABEL_41; case 0x15: v4 = (int *)off_40287C; goto LABEL_41; case 0x16: if ( v6 == 2 ) goto LABEL_36; v4 = (int *)off_402874; goto LABEL_41; case 0x17: v4 = (int *)dword_402878; goto LABEL_41; case 0x18: v4 = (int *)off_402898; goto LABEL_41; case 0x19: v4 = (int *)off_40289C; goto LABEL_41; case 0x1A: v4 = (int *)off_402868; goto LABEL_41; case 0x1B: LABEL_36: v4 = (int *)off_402870; goto LABEL_41; case 0x1C: v4 = (int *)off_40286C; goto LABEL_41; case 0x1D: v4 = (int *)off_402894; goto LABEL_41; case 0x1E: v4 = (int *)dword_402890; goto LABEL_41; case 0x1F: v4 = (int *)off_402864; goto LABEL_41; case 0x20: v4 = (int *)off_402860; goto LABEL_41; case 0x21: v4 = (int *)dword_402858; goto LABEL_41; case 0x22: v4 = (int *)dword_402854; goto LABEL_41; case 0x23: v4 = (int *)off_402850; LABEL_41: opm_memcpy_aligned(result: a1, a2: v4, a3: 0x4C0u, a4: v3); result = 0; break; default: return result; } } return result; } /* ==== ANON size=278 ==== */ int __fastcall sub_4028D8(unsigned int a1, int a2, int a3, int a4) { int *v4; // r9 int v5; // r5 void (__cdecl *v7)(); // r4 _DWORD v9[8]; // [sp+20h] [bp-24h] BYREF int v10; // [sp+40h] [bp-4h] v4 = off_402D88; v5 = 262; v10 = *off_402D88; if ( a1 <= 0x3F && a2 != 0 && a4 != 0 ) { if ( opm_sysdrv_rpc_30() != 0 ) { v5 = 1296; } else if ( opm_sysdrv_rpc_33() != 0 ) { v5 = 1297; } else if ( opm_sysdrv_rpc_1() != 0 ) { v5 = 1298; } else if ( opm_sysdrv_rpc_3() != 0 ) { v5 = 1299; } else { opm_sysdrv_rpc_E(); opm_lib_zero_fill_words(result: v9, a2: 0x20u); if ( opm_sysdrv_rpc_10() != 0 ) { v5 = 1301; } else { v5 = sub_4030BA(a1: v9, a2: a4, a3: 16); if ( v5 != 0 ) v5 = 262; } } if ( v5 == 0 ) goto LABEL_21; } v7 = (void (__cdecl *)())off_402D8C; off_402D8C(a1: 7, a2: 61440); v7(); v7(); while ( *v4 != v10 ) { ((void (__fastcall *)(int))loc_40316C)(a1: *v4 - v10); LABEL_21: v5 = 0; } return v5; } /* ==== ANON size=594 ==== */ int __fastcall sub_4022B8(int a1, int a2, int a3, unsigned int a4, int a5, int a6, int *a7, int a8) { int *v8; // r7 int v10; // r5 bool v11; // zf void (__cdecl *v12)(); // r4 int v15; // r11 int v16; // r0 int *v17; // r7 int *v18; // r0 int v19; // r6 _DWORD *v20; // r8 unsigned int v21; // r9 int v22; // r7 int v23; // r0 bool v24; // zf unsigned int v25; // r0 bool v26; // zf int v27; // r0 int v28; // r0 bool v29; // zf void (__cdecl *v30)(); // r8 int v31; // r0 void (__cdecl *v32)(); // r6 unsigned int v33; // r0 bool v34; // zf int v35; // [sp+0h] [bp-1Ch] int v36; // [sp+4h] [bp-18h] _DWORD *v37; // [sp+4h] [bp-18h] int v38; // [sp+8h] [bp-14h] BYREF int v39; // [sp+Ch] [bp-10h] BYREF int v40; // [sp+10h] [bp-Ch] BYREF int v41; // [sp+14h] [bp-8h] BYREF int v42; // [sp+18h] [bp-4h] BYREF int savedregs[9]; // [sp+1Ch] [bp+0h] v10 = 264; if ( a6 != 32 || a4 > 4 || a3 == 0 ) goto LABEL_8; v11 = a5 == 0; if ( a5 != 0 ) { v8 = a7; v11 = a7 == nullptr; } if ( v11 ) goto LABEL_8; *(_DWORD *)(a5 + 20) = 0; opm_lib_thunk_tailjump( a1: (struct tee_fmt_state *)&v38, a2: a3, a3: a4, a4, a5: v35, a6: v36, a7: 0, a8: v39, a9: v40, a10: v41, a11: v42, a12: savedregs[0], a13: savedregs[1]); v15 = v38; if ( a2 != 0 && v38 == 1 ) { v16 = dword_402514; LABEL_18: *v8 = v16; return 0; } if ( a2 != 1 && v38 == 8 || a2 != 1 && v38 == 32 ) { v16 = dword_402514 + 3; goto LABEL_18; } switch ( v38 ) { case 1: case 8: goto LABEL_23; case 2: case 4: *(_DWORD *)(a5 + 20) = 0; return 0; case 3: case 5: case 6: case 7: goto LABEL_47; default: if ( v38 != 32 ) { LABEL_47: v10 = 264; goto LABEL_8; } LABEL_23: v17 = (int *)off_402590; v18 = &(*off_402590)[22 * a1]; v19 = a8; v20 = v18 + 14; if ( v18[14] == 0 ) { v27 = v18[13]; v41 = 0; v42 = 0; v39 = 0; v40 = 0; v28 = sub_4031F2(a1: v27, a2: &v42, a3: &v41, a4: &v40, a5: &v39); v29 = v28 == 7; if ( v28 != 7 ) { v10 = v28; v29 = v28 == 0; } if ( !v29 ) goto LABEL_57; if ( v41 == 3 ) { if ( v39 == 1 ) { v34 = v15 == 32; v31 = 1; if ( v15 == 32 ) v34 = v40 == 2; if ( v34 ) { v31 = 2; if ( v17[22 * a1 + 20] != 2 && a8 == 0 ) v31 = 1; } goto LABEL_60; } if ( v39 == 2 ) { v10 = 269; *(_DWORD *)(a5 + 16) = 1; *(_DWORD *)(a5 + 20) = 0; LABEL_57: v30 = (void (__cdecl *)())off_402EC8; off_402EC8(a1: 7, a2: 61440); v30(); v30(); goto LABEL_63; } } else { v39 = 0; } v31 = 0; v39 = 0; LABEL_60: *(_DWORD *)(a5 + 20) = v31; v10 = 0; goto LABEL_63; } v21 = 0; v22 = 0; v40 = 0; v41 = 0; v42 = 0; *(_DWORD *)(a5 + 20) = 0x40000000; v39 = 0; v37 = v18 + 20; while ( 1 ) { if ( v22 == 32 ) { LABEL_48: v10 = 0; goto LABEL_62; } if ( *v20 >> v22 << 31 != 0 ) break; LABEL_43: ++v22; } if ( v21 > 4 ) goto LABEL_48; v23 = sub_4031F2(a1: v22, a2: &v42, a3: &v41, a4: &v40, a5: &v39); v24 = v23 == 7; if ( v23 != 7 ) { v10 = v23; v24 = v23 == 0; } if ( !v24 ) goto LABEL_61; if ( v41 != 3 ) { v39 = 0; goto LABEL_37; } if ( v39 == 1 ) { v26 = v15 == 32; v25 = 1; if ( v15 == 32 ) v26 = v40 == 2; if ( v26 ) { v25 = 2; if ( *v37 != 2 && a8 == 0 ) v25 = 1; } goto LABEL_41; } if ( v39 != 2 ) { LABEL_37: v25 = 0; v39 = 0; LABEL_41: ++v21; if ( v25 < *(_DWORD *)(a5 + 20) ) *(_DWORD *)(a5 + 20) = v25; goto LABEL_43; } v10 = 269; *(_DWORD *)(a5 + 16) = 1; *(_DWORD *)(a5 + 20) = 0; LABEL_61: v32 = (void (__cdecl *)())off_4025C4; off_4025C4(a1: 7, a2: 61440); v32(); v32(); LABEL_62: v17 = (int *)off_402590; v19 = a8; LABEL_63: if ( v19 == 0 ) { v33 = v17[22 * a1 + 20]; if ( v33 <= *(_DWORD *)(a5 + 20) ) *(_DWORD *)(a5 + 20) = v33; if ( opm_sysdrv_rpc_304() != 0 ) *(_DWORD *)(a5 + 20) = 0; } if ( v10 == 0 ) return 0; LABEL_8: v12 = (void (__cdecl *)())off_4025C4; off_4025C4(a1: 7, a2: 61440); v12(); v12(); return v10; } } /* ==== ANON size=1078 ==== */ int __fastcall sub_4012CC(int a1, int a2, unsigned int a3) { int v3; // r4 struct tee_fmt_state *v4; // r5 int v5; // r6 int v6; // r9 int v7; // r10 int v8; // r11 int *v9; // r8 unsigned int v11; // r1 int v12; // r3 char unk00; // t1 int result; // r0 int v15; // r0 int v16; // r3 int v17; // lr int v18; // r6 int v19; // r4 void (__cdecl *v20)(); // r4 int *v21; // r11 __int64 v22; // r0 int v23; // r3 int v24; // r5 void (__cdecl *v25)(); // r4 void (__cdecl *v26)(); // r4 int v27; // r5 int v28; // r6 bool v29; // zf int *v30; // r0 _DWORD *v31; // r0 int v32; // t1 _DWORD *v33; // r2 int v34; // r1 int v35; // r0 int *v36; // r0 _DWORD *v37; // r0 int v38; // t1 _DWORD *v39; // r1 int v40; // r2 int *v41; // r0 void (__cdecl *v42)(); // r4 int v43; // r1 int *v44; // r6 int v45; // r0 int *v46; // r6 int v47; // t1 int v48; // r1 bool v49; // zf int v50; // r1 bool v51; // zf int v52; // r0 int v53; // [sp+Ch] [bp-1384h] BYREF int v54[4]; // [sp+10h] [bp-1380h] BYREF unsigned int v55[5]; // [sp+20h] [bp-1370h] BYREF int v56; // [sp+34h] [bp-135Ch] int v57[1010]; // [sp+38h] [bp-1358h] BYREF _DWORD v58[76]; // [sp+1010h] [bp-380h] BYREF int v59[82]; // [sp+1140h] [bp-250h] BYREF struct tee_fmt_state v60[6]; // [sp+1288h] [bp-108h] BYREF int v61; // [sp+138Ch] [bp-4h] v9 = off_4021D8; v61 = *off_4021D8; if ( a1 != 0 ) { v5 = a2; if ( a2 != 0 ) { v3 = a3; if ( a3 <= 0x100 ) { v4 = v60; v11 = 256 - a3; if ( a3 > 0xFF ) v11 = 0; opm_lib_zero_fill_bytes(result: (_BYTE *)v60 + a3, a2: v11); opm_lib_thunk_tailjump( a1: v60, a2: a1, a3: v3, a4: v12, a5: v60[0].unk00, a6: v60[0].unk04, a7: v60[0].field08, a8: v60[0].unk0C, a9: v60[0].field10, a10: v60[0].field14, a11: v60[0].field18, a12: v60[0].field1C, a13: v60[0].field20); while ( v3 != 0 ) { unk00 = v4->unk00; v4 = (struct tee_fmt_state *)((char *)v4 + 1); *(_BYTE *)(v5 - 1 + v3--) = unk00; } } } } result = *v9 - v61; if ( *v9 != v61 ) { v15 = ((int (__fastcall *)(int))loc_40316C)(a1: result); v59[73] = v3; v59[74] = (int)v4; v59[75] = v5; v59[76] = a1; v59[77] = (int)v9; v59[78] = v6; v59[79] = v7; v59[80] = v8; v59[81] = v17; v18 = v15; v59[71] = *off_4021D8; if ( v15 == 0 || (unsigned int)(v19 = *(_DWORD *)(v15 + 16)) >= 0x40 ) { v20 = (void (__cdecl *)())off_402270; off_402270(a1: 7, a2: 61440); v20(); goto LABEL_95; } v21 = (int *)off_40226C; if ( (*off_40226C)[22 * v19] == 3 ) { opm_memcpy_aligned(result: v54, a2: (int *)(v15 + 24), a3: 0x1000u, a4: v16); if ( v21[22 * v19 + 11] == v55[4] ) { if ( sub_4028D8(a1: v19, a2: v55, a3: 4080, a4: v54) != 0 ) goto LABEL_91; if ( opm_memcmp_be(a1: (unsigned int *)off_4017A0, a2: v55, a3: 0x10u) != 0 && opm_memcmp_be(a1: (unsigned int *)off_4017A4, a2: v55, a3: 0x10u) != 0 && opm_memcmp_be(a1: (unsigned int *)off_4017A8, a2: v55, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: (unsigned int *)off_4017AC, a2: v55, a3: 0x10u) == 0 ) goto LABEL_96; LODWORD(v22) = opm_memcmp_be(a1: (unsigned int *)off_4017B0, a2: v55, a3: 0x10u); if ( (_DWORD)v22 != 0 ) { if ( opm_memcmp_be(a1: (unsigned int *)off_4017B4, a2: v55, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: (unsigned int *)off_4017B8, a2: v55, a3: 0x10u) == 0 || opm_memcmp_be(a1: (unsigned int *)off_4017BC, a2: v55, a3: 0x10u) == 0 ) { v41 = off_4017D8; if ( off_4017D8[2] == 1 ) { if ( *off_4017D8 != v19 ) { LABEL_65: v42 = (void (__cdecl *)())off_4019BC; off_4019BC(a1: 7, a2: 61440); v42(); LABEL_90: v42(); goto LABEL_91; } } else { *off_4017D8 = v19; v41[2] = 1; if ( v41[1] == 1 ) v43 = 0; else v43 = v21[22 * v19 + 15]; v41[3] = v43; } LABEL_96: JUMPOUT(0x401740); } v24 = opm_memcmp_be(a1: (unsigned int *)off_4017C0, a2: v55, a3: 0x10u); if ( v24 != 0 && opm_memcmp_be(a1: (unsigned int *)off_4017C4, a2: v55, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: (unsigned int *)off_4017C8, a2: v55, a3: 0x10u) != 0 && opm_memcmp_be(a1: (unsigned int *)off_4017CC, a2: v55, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: (unsigned int *)off_4017D0, a2: v55, a3: 0x10u) == 0 || opm_memcmp_be(a1: (unsigned int *)off_4017D4, a2: v55, a3: 0x10u) == 0 ) { JUMPOUT(0x401728); } LABEL_91: off_4019BC(a1: 7, a2: 61440); JUMPOUT(0x401702); } v48 = off_4017D8[2]; v49 = v48 == 1; if ( v48 == 1 ) v49 = *off_4017D8 == v19; if ( v49 && v56 != 8 ) goto LABEL_65; goto LABEL_96; } v44 = &v21[22 * v19]; v47 = v44[1]; v46 = v44 + 1; v45 = v47; if ( v47 == 1 ) { if ( v24 != 0 ) goto LABEL_89; } else if ( v45 != 0 || opm_memcmp_be(a1: (unsigned int *)off_4017C4, a2: v55, a3: 0x10u) != 0 ) { goto LABEL_89; } if ( v56 == 280 ) { v50 = off_4017D8[2]; v51 = v50 == 1; if ( v50 == 1 ) v51 = *off_4017D8 == v19; if ( v51 ) { opm_memcpy_aligned(result: v59, a2: v57, a3: 0x118u, a4: v23); if ( v59[68] == 16 ) { opm_asd301_path__h1(a1: (int)v59, a2: 256); opm_lib_zero_fill_words(result: v58, a2: 0x130u); v52 = *v46; v53 = 256; if ( ((int (__fastcall *)(int, int *, int, _DWORD *, int *))loc_4029FC)( a1: v52, a2: v59, a3: 256, a4: v58, a5: &v53) == 0 ) { opm_asd301_path__h1(a1: (int)v58, a2: v59[68]); goto LABEL_96; } } else if ( v59[68] == 0 ) { goto LABEL_96; } } } } LABEL_89: v42 = (void (__cdecl *)())off_4019BC; off_4019BC(a1: 7, a2: 61440); v42(); goto LABEL_90; } HIDWORD(v22) = v21[22 * v19 + 1]; if ( v22 != 0x100000000LL || v56 != 4 || *(_DWORD *)(v18 + 4120) == 0 ) goto LABEL_89; v35 = opm_sysdrv_rpc_301(); } else { if ( v56 != 16 ) goto LABEL_89; v28 = v57[0]; v27 = v57[1]; v29 = v57[0] == 32; if ( v57[0] != 32 ) v29 = v57[0] == 8; if ( v29 ) { if ( v21[22 * v19 + 1] != 1 ) goto LABEL_89; } else if ( v57[0] != 1 || v21[22 * v19 + 1] != 0 ) { goto LABEL_89; } if ( v57[1] >= 3u && v57[1] != 0x40000000 || opm_memcmp_be(a1: (unsigned int *)off_4017A8, a2: v55, a3: 0x10u) == 0 ) { goto LABEL_89; } v30 = &v21[22 * v19]; v30[19] = v28; v30[20] = v27; if ( (unsigned int)(v27 - 1) >= 2 ) { if ( v27 != 0 ) goto LABEL_89; v36 = &v21[22 * v19]; v38 = v36[18]; v37 = v36 + 18; if ( v38 != 1 ) goto LABEL_96; v39 = off_401938; v40 = *(_DWORD *)off_401938; if ( *(_DWORD *)off_401938 == 0 ) goto LABEL_89; *v37 = 0; *v39 = v40 - 1; if ( v40 != 1 ) goto LABEL_96; } else { v32 = v30[18]; v31 = v30 + 18; if ( v32 != 0 ) goto LABEL_96; v33 = off_401938; v34 = *(_DWORD *)off_401938; if ( *(_DWORD *)off_401938 > 0x3Fu ) goto LABEL_89; *v31 = 1; *v33 = v34 + 1; if ( v34 != 0 ) goto LABEL_96; } v35 = opm_sysdrv_rpc_305(); } if ( v35 == 0 ) goto LABEL_96; goto LABEL_89; } v26 = (void (__cdecl *)())off_401884; off_401884(a1: 7, a2: 61440); v26(); } else { v25 = (void (__cdecl *)())off_401884; off_401884(a1: 7, a2: 61440); v25(); } LABEL_95: JUMPOUT(0x401708); } return result; } /* ==== ANON size=1174 ==== */ int __fastcall sub_401AAC( unsigned int *a1, int a2, unsigned int a3, unsigned int *a4, _DWORD *a5, _DWORD *a6, int a7, _DWORD *a8) { unsigned int *p_unk04; // r6 _DWORD *v9; // r9 _DWORD *v10; // r10 _DWORD *v11; // r11 unsigned int *v12; // r7 int v13; // r5 bool v14; // zf void (__cdecl *v15)(); // r4 unsigned int v17; // r4 int *v18; // r1 int *v19; // r8 _DWORD *v20; // r8 int v21; // t1 int v22; // r0 bool v23; // zf int v24; // r0 bool v25; // zf int v26; // r3 void (__cdecl *v27)(); // r4 int v28; // r0 int v29; // r0 int v30; // r0 int v31; // r0 int v32; // r0 int v33; // r1 int v34; // r0 int *v35; // r1 int *v36; // r4 bool v37; // zf int v38; // r4 unsigned int unk00; // r5 int *v40; // r8 int v41; // r0 int v42; // [sp+0h] [bp-FFCh] int v43; // [sp+4h] [bp-FF8h] int v44; // [sp+8h] [bp-FF4h] int v45; // [sp+Ch] [bp-FF0h] int v46; // [sp+10h] [bp-FECh] int v47; // [sp+14h] [bp-FE8h] int v48; // [sp+18h] [bp-FE4h] int v49; // [sp+1Ch] [bp-FE0h] struct tee_fmt_state v50; // [sp+20h] [bp-FDCh] BYREF int v51; // [sp+FF8h] [bp-4h] v11 = (_DWORD *)off_401F44; v12 = a1; v13 = 264; v51 = *(_DWORD *)off_401F44; if ( a2 != 16 ) goto LABEL_8; if ( a1 == nullptr ) goto LABEL_8; p_unk04 = a4; if ( a4 == nullptr ) goto LABEL_8; v9 = a6; v14 = a6 == nullptr; if ( a6 != nullptr ) { v10 = a8; v14 = a8 == nullptr; } if ( v14 ) goto LABEL_8; while ( 1 ) { v17 = a3; if ( a3 > 0x3F ) { v13 = 259; goto LABEL_8; } v18 = (int *)off_401F48; *v10 = 0; v19 = &v18[22 * a3]; v21 = v19[1]; v20 = v19 + 1; v48 = v21; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F4C, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F50, a3: 0x10u) == 0 ) { if ( a7 != 32 ) goto LABEL_80; v50.unk00 = 0; v28 = opm_sysdrv_rpc_102(); if ( v28 != 0 ) goto LABEL_44; if ( v50.unk00 - 1 > 4 ) v30 = -1; else v30 = dword_401FB0[v50.unk00 - 1]; goto LABEL_58; } if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F54, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F58, a3: 0x10u) == 0 ) { v31 = 0; goto LABEL_60; } if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F5C, a3: 0x10u) == 0 ) goto LABEL_54; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F60, a3: 0x10u) == 0 ) { v31 = 1; LABEL_60: v42 = (int)v9; v43 = a7; v44 = (int)v10; v45 = v31; v32 = sub_4022B8(a1: v17, a2: v48, a3: p_unk04, a4: a5); LABEL_61: v13 = v32; if ( v32 != 0 ) goto LABEL_8; goto LABEL_62; } if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F64, a3: 0x10u) == 0 ) goto LABEL_54; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F68, a3: 0x10u) == 0 ) goto LABEL_62; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F6C, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F70, a3: 0x10u) == 0 ) { LABEL_54: v32 = sub_402594(a1: v9, a2: a7); goto LABEL_61; } if ( __PAIR64__(v48, opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F74, a3: 0x10u)) == 0x100000000LL || (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F78, a3: 0x10u) | v48) == 0 ) { if ( a7 != 32 ) goto LABEL_80; v9[5] = 0; v9 += 5; v50.unk00 = 0; v34 = sub_40325C(a1: v9, a2: 0, a3: &v50, a4: 0); if ( v34 != 0 ) { v13 = v34; *v10 = dword_401FA4; goto LABEL_81; } } else if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F7C, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F80, a3: 0x10u) != 0 ) { v22 = opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F84, a3: 0x10u); v23 = v48 == 1; if ( v48 == 1 ) v23 = v22 == 0; if ( v23 || (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F88, a3: 0x10u) | v48) == 0 ) goto LABEL_62; v10 = a5; v24 = opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F8C, a3: 0x10u); v25 = v48 == 1; if ( v48 == 1 ) v25 = v24 == 0; if ( !v25 && (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F90, a3: 0x10u) | v48) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F94, a3: 0x10u) != 0 ) { v13 = 263; } else { v37 = a5 == (_DWORD *)4056; if ( a5 == (_DWORD *)4056 ) v37 = a7 == 20; v13 = 264; if ( v37 ) { v38 = 0; v9[4] = 0; opm_lib_thunk_tailjump( a1: &v50, a2: (int)p_unk04, a3: 4056, a4: v26, a5: v42, a6: v43, a7: v44, a8: v45, a9: v46, a10: v47, a11: v48, a12: v49, a13: v50.unk00); p_unk04 = &v50.unk04; unk00 = v50.unk00; v40 = (int *)off_401F98; while ( 1 ) { v12 = (unsigned int *)(v38 * 4 + 16); if ( v38 == 28 ) break; v41 = opm_memcmp_be(a1: (unsigned int *)&v40[v38], a2: &v50.unk04, a3: unk00); v38 += 4; if ( v41 == 0 ) { v9[4] = dword_401F9C; goto LABEL_62; } } v13 = 688; } LABEL_81: v27 = (void (__cdecl *)())off_401FA0; off_401FA0(a1: 7, a2: 61440); v27(); LABEL_82: v27(); } LABEL_8: v15 = (void (__cdecl *)())off_401FA0; off_401FA0(a1: 7, a2: 61440); v15(); v15(); goto LABEL_9; } if ( a7 != 32 ) goto LABEL_41; v30 = 1; goto LABEL_58; } if ( a7 != 32 ) { LABEL_80: v13 = 264; goto LABEL_81; } v35 = (int *)off_401F48; v9[6] = 0; v9[7] = 0; v36 = &v35[22 * v17 + 16]; v13 = opm_sysdrv_rpc_107(); if ( v13 != 0 ) goto LABEL_81; *((_QWORD *)v9 + 3) = *(_QWORD *)v36; } else { if ( a7 != 32 ) goto LABEL_80; v9[5] = 0; v50.unk00 = 0; v13 = opm_sysdrv_rpc_102(); if ( v50.unk00 != 1 ) { v13 = 608; goto LABEL_81; } v9[5] = 1; if ( v13 != 0 ) goto LABEL_81; } } else { if ( a7 != 32 ) goto LABEL_80; opm_lib_zero_fill_words(result: &v50, a2: 0x28u); v9[5] = 0; v28 = opm_sysdrv_rpc_200(); if ( v28 != 0 ) { LABEL_44: v13 = v28; goto LABEL_81; } v33 = dword_401FA8; if ( LOBYTE(v50.unk00) == 0 ) v33 = 3; v9[5] = v33; } } else { if ( a7 != 32 ) goto LABEL_80; v9[5] = 0; v50.unk00 = 0; v13 = opm_sysdrv_rpc_105(); if ( v13 != 0 ) goto LABEL_81; if ( *v20 == 0 ) { v30 = v9[5] | 1; goto LABEL_58; } if ( *v20 != 1 ) { v13 = 260; goto LABEL_81; } v49 = 0; v28 = opm_sysdrv_rpc_102(); if ( v28 != 0 ) goto LABEL_44; v29 = v9[5]; v9[5] = v29 | 8; if ( (v50.unk00 & 2) != 0 && *off_401FAC != 0 ) { v30 = v29 | 0x28; LABEL_58: v9[5] = v30; } } } else { if ( a7 != 72 ) goto LABEL_41; if ( v48 != 0 ) { *v10 = dword_401FA4 + 6; LABEL_41: v27 = (void (__cdecl *)())off_401FA0; off_401FA0(a1: 7, a2: 61440); v27(); v13 = 264; goto LABEL_82; } } LABEL_62: v13 = 0; LABEL_9: if ( *v11 == v51 ) return v13; ((void (__fastcall *)(int))loc_40316C)(a1: *v11 - v51); } }