{"type": "func", "start": 6442467184, "end": 6442467790, "name": "sub_180003F70", "pseudocode": "// \n// sub_180003F70 from 0x180003f70 to 0x1800041ce (606 bytes)\n// \n// 5 xrefs:\n// > sub_180017A50 @ 0x180017b58\n// > sub_180017E70 @ 0x180018015\n// > <???> @ 0x18017d5b0\n// > <???> @ 0x18017d5c0\n// > <???> @ 0x1801f6240\n// \n// This function is hookable on this platform!\n// \n// Using BromaIDA 8.0.0 @ https://github.com/Stazzical/BromaIDA\n// Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings\n// \n\n__int64 __fastcall sub_180003F70(__int64 *a1, __int64 a2, int a3)\n{\n  __int64 v3; // r13\n  __int64 v4; // rbp\n  int v6; // r15d\n  __int64 v7; // rsi\n  int v9; // eax\n  __int64 v10; // rdi\n  int v11; // edx\n  unsigned int v12; // ecx\n  int v13; // eax\n  __int64 v14; // rcx\n  int v15; // r12d\n  __int64 v16; // r14\n  int v17; // edx\n  int v18; // ecx\n  __int64 v19; // rbp\n  int v20; // r14d\n  int v21; // r15d\n  size_t v22; // rsi\n  int v23; // eax\n  int v24; // ecx\n  __int64 v25; // kr00_8\n  __int64 v26; // rax\n  __int64 v27; // rax\n  __int64 v28; // r8\n  __int64 v29; // r8\n  __int64 v30; // kr10_8\n  __int64 v31; // [rsp+70h] [rbp+8h]\n  __int64 v34; // [rsp+88h] [rbp+20h]\n\n  v3 = *a1;\n  v4 = a2;\n  v6 = a3;\n  v7 = *(_QWORD *)(*a1 + 32);\n  v31 = v7;\n  if ( (unsigned int)sub_180001340(a2, 1) )\n    return 4294967161LL;\n  v9 = *(_DWORD *)(v7 + 8);\n  v10 = 0;\n  v11 = 0;\n  v12 = v9 - 1;\n  if ( !v9 )\n    v12 = 0;\n  for ( ; v12; v12 >>= 1 )\n    ++v11;\n  v13 = sub_180001340(v4, v11);\n  if ( v13 == -1 || v13 >= *(_DWORD *)(v7 + 8) )\n    return 4294967160LL;\n  v14 = *((int *)a1 + 10);\n  *((_DWORD *)a1 + 9) = v14;\n  v15 = 0;\n  v16 = 2LL * v13;\n  v34 = v16;\n  v17 = *(unsigned __int8 *)(*(_QWORD *)(v7 + 32) + v16);\n  *((_DWORD *)a1 + 10) = v17;\n  v18 = *(int *)(v7 + 4 * v14) >> 2;\n  if ( *(int *)(v3 + 4) > 0 )\n  {\n    v19 = v18;\n    v20 = 0;\n    v21 = 0;\n    v22 = 4LL * v18;\n    do\n    {\n      memmove((void *)(a1[2] + 4LL * v20), (const void *)(a1[1] + 4 * (v19 + v21)), v22);\n      ++v15;\n      v21 += 1024;\n      v20 += 512;\n    }\n    while ( v15 < *(_DWORD *)(v3 + 4) );\n    v17 = *((_DWORD *)a1 + 10);\n    v7 = v31;\n    v4 = a2;\n    v16 = v34;\n    v6 = a3;\n  }\n  if ( v17 )\n  {\n    sub_180001340(v4, 1);\n    if ( (unsigned int)sub_180001340(v4, 1) == -1 )\n      return 4294967160LL;\n  }\n  if ( v6 )\n    sub_180008050(a1, v4, *(_QWORD *)(v7 + 40) + 40LL * *(unsigned __int8 *)(*(_QWORD *)(v7 + 32) + v16 + 1));\n  v23 = *((_DWORD *)a1 + 6);\n  *((_DWORD *)a1 + 6) = 0;\n  if ( v23 == -1 )\n  {\n    v24 = 0;\n  }\n  else\n  {\n    v25 = *(int *)(v7 + 4LL * *((int *)a1 + 10));\n    v24 = *(_DWORD *)(v7 + 4LL * *((int *)a1 + 9)) / 4 + (((BYTE4(v25) & 3) + (int)v25) >> 2);\n  }\n  *((_DWORD *)a1 + 7) = v24;\n  v26 = a1[7];\n  if ( v26 == -1 )\n  {\n    a1[6] = -1;\n    a1[7] = 0;\n    v27 = 0;\n  }\n  else\n  {\n    v28 = a1[8];\n    a1[7] = v26 + 1;\n    if ( v28 == -1 )\n      v27 = 0;\n    else\n      v27 = v28 + *(_DWORD *)(v7 + 4LL * *((int *)a1 + 10)) / 4 + *(_DWORD *)(v7 + 4LL * *((int *)a1 + 9)) / 4;\n  }\n  a1[8] = v27;\n  v29 = a1[6];\n  if ( v29 != -1 )\n  {\n    v30 = *(int *)(v7 + 4LL * *((int *)a1 + 10));\n    v10 = v29 + *(_DWORD *)(v7 + 4LL * *((int *)a1 + 9)) / 4 + (((BYTE4(v30) & 3) + (int)v30) >> 2);\n  }\n  a1[6] = v10;\n  return 0;\n}", "assembly": "; \n; sub_180003F70 from 0x180003f70 to 0x1800041ce (606 bytes)\n; \n; 5 xrefs:\n; > sub_180017A50 @ 0x180017b58\n; > sub_180017E70 @ 0x180018015\n; > <???> @ 0x18017d5b0\n; > <???> @ 0x18017d5c0\n; > <???> @ 0x1801f6240\n; \n; This function is hookable on this platform!\n; \n; Using BromaIDA 8.0.0 @ https:;github.com/Stazzical/BromaIDA\n; Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https:;github.com/geode-sdk/bindings\n; \n\nmov     [rsp+arg_10], r8d                                              ; +0x0, 0x180003f70\nmov     [rsp+arg_8], rdx                                               ; +0x5, 0x180003f75\npush    rbx                                                            ; +0xa, 0x180003f7a\npush    rbp                                                            ; +0xb, 0x180003f7b\npush    rsi                                                            ; +0xc, 0x180003f7c\npush    r13                                                            ; +0xd, 0x180003f7d\npush    r15                                                            ; +0xf, 0x180003f7f\nsub     rsp, 40h                                                       ; +0x11, 0x180003f81\nmov     r13, [rcx]                                                     ; +0x15, 0x180003f85\nmov     rbp, rdx                                                       ; +0x18, 0x180003f88\nmov     rbx, rcx                                                       ; +0x1b, 0x180003f8b\nmov     edx, 1                                                         ; +0x1e, 0x180003f8e\nmov     rcx, rbp                                                       ; +0x23, 0x180003f93\nmov     r15d, r8d                                                      ; +0x26, 0x180003f96\nmov     rsi, [r13+20h]                                                 ; +0x29, 0x180003f99\nmov     [rsp+68h+arg_0], rsi                                           ; +0x2d, 0x180003f9d\ncall    sub_180001340                                                  ; +0x32, 0x180003fa2\ntest    eax, eax                                                       ; +0x37, 0x180003fa7\njz      short loc_180003FBC                                            ; +0x39, 0x180003fa9\nmov     eax, 0FFFFFF79h                                                ; +0x3b, 0x180003fab\nadd     rsp, 40h                                                       ; +0x40, 0x180003fb0\npop     r15                                                            ; +0x44, 0x180003fb4\npop     r13                                                            ; +0x46, 0x180003fb6\npop     rsi                                                            ; +0x48, 0x180003fb8\npop     rbp                                                            ; +0x49, 0x180003fb9\npop     rbx                                                            ; +0x4a, 0x180003fba\nretn                                                                   ; +0x4b, 0x180003fbb\nmov     eax, [rsi+8]                                                   ; +0x4c, 0x180003fbc\nmov     [rsp+68h+var_30], rdi                                          ; +0x4f, 0x180003fbf\nxor     edi, edi                                                       ; +0x54, 0x180003fc4\ntest    eax, eax                                                       ; +0x56, 0x180003fc6\nmov     edx, edi                                                       ; +0x58, 0x180003fc8\nlea     ecx, [rax-1]                                                   ; +0x5a, 0x180003fca\ncmovz   ecx, eax                                                       ; +0x5d, 0x180003fcd\ntest    ecx, ecx                                                       ; +0x60, 0x180003fd0\njz      short loc_180003FDA                                            ; +0x62, 0x180003fd2\ninc     edx                                                            ; +0x64, 0x180003fd4\nshr     ecx, 1                                                         ; +0x66, 0x180003fd6\njnz     short loc_180003FD4                                            ; +0x68, 0x180003fd8\nmov     rcx, rbp                                                       ; +0x6a, 0x180003fda\nmov     [rsp+68h+var_40], r14                                          ; +0x6d, 0x180003fdd\ncall    sub_180001340                                                  ; +0x72, 0x180003fe2\ncmp     eax, 0FFFFFFFFh                                                ; +0x77, 0x180003fe7\njz      loc_1800041B3                                                  ; +0x7a, 0x180003fea\ncmp     eax, [rsi+8]                                                   ; +0x80, 0x180003ff0\njge     loc_1800041B3                                                  ; +0x83, 0x180003ff3\nmovsxd  rcx, dword ptr [rbx+28h]                                       ; +0x89, 0x180003ff9\nmov     [rbx+24h], ecx                                                 ; +0x8d, 0x180003ffd\ncdqe                                                                   ; +0x90, 0x180004000\nmov     [rsp+68h+var_38], r12                                          ; +0x92, 0x180004002\nmov     r12d, edi                                                      ; +0x97, 0x180004007\nlea     r14, [rax+rax]                                                 ; +0x9a, 0x18000400a\nmov     rax, [rsi+20h]                                                 ; +0x9e, 0x18000400e\nmov     [rsp+68h+arg_18], r14                                          ; +0xa2, 0x180004012\nmovzx   edx, byte ptr [rax+r14]                                        ; +0xaa, 0x18000401a\nmov     [rbx+28h], edx                                                 ; +0xaf, 0x18000401f\nmov     ecx, [rsi+rcx*4]                                               ; +0xb2, 0x180004022\nsar     ecx, 2                                                         ; +0xb5, 0x180004025\ncmp     [r13+4], edi                                                   ; +0xb8, 0x180004028\njle     short loc_180004095                                            ; +0xbc, 0x18000402c\nmovsxd  rbp, ecx                                                       ; +0xbe, 0x18000402e\nmov     r14d, edi                                                      ; +0xc1, 0x180004031\nmov     r15d, edi                                                      ; +0xc4, 0x180004034\nlea     rsi, ds:0[rbp*4]                                               ; +0xc7, 0x180004037\nnop                                                                    ; +0xcf, 0x18000403f\nmov     rax, [rbx+8]                                                   ; +0xd0, 0x180004040\nmov     r8, rsi; Size                                                  ; +0xd4, 0x180004044\nmovsxd  rcx, r15d                                                      ; +0xd7, 0x180004047\nadd     rcx, rbp                                                       ; +0xda, 0x18000404a\nlea     rdx, [rax+rcx*4]; Src                                          ; +0xdd, 0x18000404d\nmov     rax, [rbx+10h]                                                 ; +0xe1, 0x180004051\nmovsxd  rcx, r14d                                                      ; +0xe5, 0x180004055\nlea     rcx, [rax+rcx*4]; void *                                       ; +0xe8, 0x180004058\ncall    memmove                                                        ; +0xec, 0x18000405c\ninc     r12d                                                           ; +0xf1, 0x180004061\nadd     r15d, 400h                                                     ; +0xf4, 0x180004064\nadd     r14d, 200h                                                     ; +0xfb, 0x18000406b\ncmp     r12d, [r13+4]                                                  ; +0x102, 0x180004072\njl      short loc_180004040                                            ; +0x106, 0x180004076\nmov     edx, [rbx+28h]                                                 ; +0x108, 0x180004078\nmov     rsi, [rsp+68h+arg_0]                                           ; +0x10b, 0x18000407b\nmov     rbp, [rsp+68h+arg_8]                                           ; +0x110, 0x180004080\nmov     r14, [rsp+68h+arg_18]                                          ; +0x115, 0x180004085\nmov     r15d, [rsp+68h+arg_10]                                         ; +0x11d, 0x18000408d\nmov     r12, [rsp+68h+var_38]                                          ; +0x125, 0x180004095\ntest    edx, edx                                                       ; +0x12a, 0x18000409a\njz      short loc_1800040C1                                            ; +0x12c, 0x18000409c\nmov     edx, 1                                                         ; +0x12e, 0x18000409e\nmov     rcx, rbp                                                       ; +0x133, 0x1800040a3\ncall    sub_180001340                                                  ; +0x136, 0x1800040a6\nmov     edx, 1                                                         ; +0x13b, 0x1800040ab\nmov     rcx, rbp                                                       ; +0x140, 0x1800040b0\ncall    sub_180001340                                                  ; +0x143, 0x1800040b3\ncmp     eax, 0FFFFFFFFh                                                ; +0x148, 0x1800040b8\njz      loc_1800041B3                                                  ; +0x14b, 0x1800040bb\ntest    r15d, r15d                                                     ; +0x151, 0x1800040c1\njz      short loc_1800040E7                                            ; +0x154, 0x1800040c4\nmov     rax, [rsi+20h]                                                 ; +0x156, 0x1800040c6\nmovzx   ecx, byte ptr [rax+r14+1]                                      ; +0x15a, 0x1800040ca\nmov     rax, [rsi+28h]                                                 ; +0x160, 0x1800040d0\nlea     rdx, [rcx+rcx*4]                                               ; +0x164, 0x1800040d4\nmov     rcx, rbx                                                       ; +0x168, 0x1800040d8\nlea     r8, [rax+rdx*8]                                                ; +0x16b, 0x1800040db\nmov     rdx, rbp                                                       ; +0x16f, 0x1800040df\ncall    sub_180008050                                                  ; +0x172, 0x1800040e2\nmov     eax, [rbx+18h]                                                 ; +0x177, 0x1800040e7\nmov     [rbx+18h], edi                                                 ; +0x17a, 0x1800040ea\ncmp     eax, 0FFFFFFFFh                                                ; +0x17d, 0x1800040ed\njnz     short loc_1800040F6                                            ; +0x180, 0x1800040f0\nmov     ecx, edi                                                       ; +0x182, 0x1800040f2\njmp     short loc_180004119                                            ; +0x184, 0x1800040f4\nmovsxd  rax, dword ptr [rbx+28h]                                       ; +0x186, 0x1800040f6\nmov     eax, [rsi+rax*4]                                               ; +0x18a, 0x1800040fa\ncdq                                                                    ; +0x18d, 0x1800040fd\nand     edx, 3                                                         ; +0x18e, 0x1800040fe\nlea     ecx, [rdx+rax]                                                 ; +0x191, 0x180004101\nmovsxd  rax, dword ptr [rbx+24h]                                       ; +0x194, 0x180004104\nsar     ecx, 2                                                         ; +0x198, 0x180004108\nmov     eax, [rsi+rax*4]                                               ; +0x19b, 0x18000410b\ncdq                                                                    ; +0x19e, 0x18000410e\nand     edx, 3                                                         ; +0x19f, 0x18000410f\nadd     eax, edx                                                       ; +0x1a2, 0x180004112\nsar     eax, 2                                                         ; +0x1a4, 0x180004114\nadd     ecx, eax                                                       ; +0x1a7, 0x180004117\nmov     [rbx+1Ch], ecx                                                 ; +0x1a9, 0x180004119\nmov     rax, [rbx+38h]                                                 ; +0x1ac, 0x18000411c\ncmp     rax, 0FFFFFFFFFFFFFFFFh                                        ; +0x1b0, 0x180004120\njnz     short loc_180004136                                            ; +0x1b4, 0x180004124\nmov     [rbx+30h], rax                                                 ; +0x1b6, 0x180004126\ninc     rax                                                            ; +0x1ba, 0x18000412a\nmov     [rbx+38h], rax                                                 ; +0x1bd, 0x18000412d\nmov     rax, rdi                                                       ; +0x1c1, 0x180004131\njmp     short loc_180004174                                            ; +0x1c4, 0x180004134\nmov     r8, [rbx+40h]                                                  ; +0x1c6, 0x180004136\ninc     rax                                                            ; +0x1ca, 0x18000413a\nmov     [rbx+38h], rax                                                 ; +0x1cd, 0x18000413d\ncmp     r8, 0FFFFFFFFFFFFFFFFh                                         ; +0x1d1, 0x180004141\njnz     short loc_18000414C                                            ; +0x1d5, 0x180004145\nmov     rax, rdi                                                       ; +0x1d7, 0x180004147\njmp     short loc_180004174                                            ; +0x1da, 0x18000414a\nmovsxd  rax, dword ptr [rbx+28h]                                       ; +0x1dc, 0x18000414c\nmov     eax, [rsi+rax*4]                                               ; +0x1e0, 0x180004150\ncdq                                                                    ; +0x1e3, 0x180004153\nand     edx, 3                                                         ; +0x1e4, 0x180004154\nlea     ecx, [rdx+rax]                                                 ; +0x1e7, 0x180004157\nmovsxd  rax, dword ptr [rbx+24h]                                       ; +0x1ea, 0x18000415a\nsar     ecx, 2                                                         ; +0x1ee, 0x18000415e\nmov     eax, [rsi+rax*4]                                               ; +0x1f1, 0x180004161\ncdq                                                                    ; +0x1f4, 0x180004164\nand     edx, 3                                                         ; +0x1f5, 0x180004165\nadd     eax, edx                                                       ; +0x1f8, 0x180004168\nsar     eax, 2                                                         ; +0x1fa, 0x18000416a\nadd     eax, ecx                                                       ; +0x1fd, 0x18000416d\ncdqe                                                                   ; +0x1ff, 0x18000416f\nadd     rax, r8                                                        ; +0x201, 0x180004171\nmov     [rbx+40h], rax                                                 ; +0x204, 0x180004174\nmov     r8, [rbx+30h]                                                  ; +0x208, 0x180004178\ncmp     r8, 0FFFFFFFFFFFFFFFFh                                         ; +0x20c, 0x18000417c\njz      short loc_1800041AB                                            ; +0x210, 0x180004180\nmovsxd  rax, dword ptr [rbx+28h]                                       ; +0x212, 0x180004182\nmov     eax, [rsi+rax*4]                                               ; +0x216, 0x180004186\ncdq                                                                    ; +0x219, 0x180004189\nand     edx, 3                                                         ; +0x21a, 0x18000418a\nlea     ecx, [rdx+rax]                                                 ; +0x21d, 0x18000418d\nmovsxd  rax, dword ptr [rbx+24h]                                       ; +0x220, 0x180004190\nsar     ecx, 2                                                         ; +0x224, 0x180004194\nmov     eax, [rsi+rax*4]                                               ; +0x227, 0x180004197\ncdq                                                                    ; +0x22a, 0x18000419a\nand     edx, 3                                                         ; +0x22b, 0x18000419b\nadd     eax, edx                                                       ; +0x22e, 0x18000419e\nsar     eax, 2                                                         ; +0x230, 0x1800041a0\nadd     ecx, eax                                                       ; +0x233, 0x1800041a3\nmovsxd  rdi, ecx                                                       ; +0x235, 0x1800041a5\nadd     rdi, r8                                                        ; +0x238, 0x1800041a8\nmov     [rbx+30h], rdi                                                 ; +0x23b, 0x1800041ab\nxor     eax, eax                                                       ; +0x23f, 0x1800041af\njmp     short loc_1800041B8                                            ; +0x241, 0x1800041b1\nmov     eax, 0FFFFFF78h                                                ; +0x243, 0x1800041b3\nmov     r14, [rsp+68h+var_40]                                          ; +0x248, 0x1800041b8\nmov     rdi, [rsp+68h+var_30]                                          ; +0x24d, 0x1800041bd\nadd     rsp, 40h                                                       ; +0x252, 0x1800041c2\npop     r15                                                            ; +0x256, 0x1800041c6\npop     r13                                                            ; +0x258, 0x1800041c8\npop     rsi                                                            ; +0x25a, 0x1800041ca\npop     rbp                                                            ; +0x25b, 0x1800041cb\npop     rbx                                                            ; +0x25c, 0x1800041cc\nretn                                                                   ; +0x25d, 0x1800041cd", "xrefs": ["sub_180017A50 @ 0x180017b58", "sub_180017E70 @ 0x180018015", "<???> @ 0x18017d5b0", "<???> @ 0x18017d5c0", "<???> @ 0x1801f6240"], "is_objc": false, "is_arm32": false, "is_arm64": false, "bida_info": "8.0.0 @ https://github.com/Stazzical/BromaIDA", "bindings_info": "commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings"}