{"type": "func", "start": 6442460496, "end": 6442460982, "name": "sub_180002550", "pseudocode": "// \n// sub_180002550 from 0x180002550 to 0x180002736 (486 bytes)\n// \n// 4 xrefs:\n// > sub_180001E90 @ 0x180001f19\n// > <???> @ 0x18017d3a8\n// > <???> @ 0x18017d3b8\n// > <???> @ 0x1801f60fc\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_180002550(int *a1, __int64 a2, int a3, int a4)\n{\n  __int64 v4; // rsi\n  int *v7; // r11\n  __int64 v8; // rbx\n  int *v9; // r10\n  __int64 v10; // r8\n  unsigned int v11; // r9d\n  __int64 v12; // rdx\n  int v13; // ecx\n  int v14; // eax\n  int v15; // edx\n  unsigned int *v16; // rax\n  __int64 v17; // rdx\n  char v18; // cl\n  __int64 i; // r9\n  int v20; // edi\n  int v21; // r8d\n  int j; // ecx\n  unsigned int v23; // edx\n  int v25; // [rsp+0h] [rbp-BCh]\n  _OWORD v26[8]; // [rsp+4h] [rbp-B8h] BYREF\n  int v27; // [rsp+84h] [rbp-38h]\n\n  v4 = a3;\n  v27 = 0;\n  v7 = a1;\n  memset(v26, 0, sizeof(v26));\n  if ( a3 > 0 )\n  {\n    v8 = 0;\n    v9 = a1;\n    do\n    {\n      v10 = *(char *)(v8 + a2);\n      if ( (int)v10 <= 0 )\n      {\n        if ( !a4 )\n          ++v9;\n      }\n      else\n      {\n        v11 = *((_DWORD *)v26 + v10);\n        v12 = *(char *)(v8 + a2);\n        if ( (int)v10 < 32 && v11 >> v10 )\n          return 0xFFFFFFFFLL;\n        *v9 = v11;\n        v13 = v10;\n        ++v9;\n        while ( 1 )\n        {\n          v14 = *((_DWORD *)v26 + v12);\n          if ( (v14 & 1) != 0 )\n            break;\n          --v13;\n          *((_DWORD *)v26 + v12--) = v14 + 1;\n          if ( v12 <= 0 )\n            goto LABEL_13;\n        }\n        if ( v13 == 1 )\n          ++DWORD1(v26[0]);\n        else\n          *((_DWORD *)v26 + v13) = 2 * *(&v25 + v13);\nLABEL_13:\n        v15 = v10 + 1;\n        if ( (int)v10 + 1 < 33 )\n        {\n          v16 = (unsigned int *)v26 + v15;\n          do\n          {\n            if ( *v16 >> 1 != v11 )\n              break;\n            ++v15;\n            v11 = *v16;\n            *v16 = 2 * *(v16 - 1);\n            ++v16;\n          }\n          while ( v15 < 33 );\n        }\n      }\n      ++v8;\n    }\n    while ( v8 < v4 );\n  }\n  if ( a4 == 1 )\n  {\nLABEL_25:\n    if ( v4 > 0 )\n    {\n      for ( i = 0; i < v4; ++i )\n      {\n        v20 = *(char *)(i + a2);\n        v21 = 0;\n        for ( j = 0; j < v20; v21 = (2 * v21) | v23 & 1 )\n          v23 = (unsigned int)*v7 >> j++;\n        if ( !a4 || (_BYTE)v20 )\n          *v7++ = v21;\n      }\n    }\n    return 0;\n  }\n  else\n  {\n    v17 = 1;\n    v18 = 31;\n    while ( ((0xFFFFFFFF >> v18) & *((_DWORD *)v26 + v17)) == 0 )\n    {\n      --v18;\n      if ( ++v17 >= 33 )\n        goto LABEL_25;\n    }\n    return 0xFFFFFFFFLL;\n  }\n}", "assembly": "; \n; sub_180002550 from 0x180002550 to 0x180002736 (486 bytes)\n; \n; 4 xrefs:\n; > sub_180001E90 @ 0x180001f19\n; > <???> @ 0x18017d3a8\n; > <???> @ 0x18017d3b8\n; > <???> @ 0x1801f60fc\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_18], rbx                                              ; +0x0, 0x180002550\npush    rbp                                                            ; +0x5, 0x180002555\npush    rsi                                                            ; +0x6, 0x180002556\npush    r14                                                            ; +0x7, 0x180002557\nsub     rsp, 0A0h                                                      ; +0x9, 0x180002559\nmov     rax, cs:__security_cookie                                      ; +0x10, 0x180002560\nxor     rax, rsp                                                       ; +0x17, 0x180002567\nmov     [rsp+0B8h+var_28], rax                                         ; +0x1a, 0x18000256a\nxorps   xmm0, xmm0                                                     ; +0x22, 0x180002572\nmovsxd  rsi, r8d                                                       ; +0x25, 0x180002575\nxor     eax, eax                                                       ; +0x28, 0x180002578\nmov     ebp, r9d                                                       ; +0x2a, 0x18000257a\nmov     [rsp+0B8h+var_38], eax                                         ; +0x2d, 0x18000257d\nmov     r14, rdx                                                       ; +0x34, 0x180002584\nmov     r11, rcx                                                       ; +0x37, 0x180002587\nmovups  [rsp+0B8h+var_B8], xmm0                                        ; +0x3a, 0x18000258a\nmovups  [rsp+0B8h+var_A8], xmm0                                        ; +0x3e, 0x18000258e\nmovups  [rsp+0B8h+var_98], xmm0                                        ; +0x43, 0x180002593\nmovups  [rsp+0B8h+var_88], xmm0                                        ; +0x48, 0x180002598\nmovups  [rsp+0B8h+var_78], xmm0                                        ; +0x4d, 0x18000259d\nmovups  [rsp+0B8h+var_68], xmm0                                        ; +0x52, 0x1800025a2\nmovups  [rsp+0B8h+var_58], xmm0                                        ; +0x57, 0x1800025a7\nmovups  [rsp+0B8h+var_48], xmm0                                        ; +0x5c, 0x1800025ac\ntest    r8d, r8d                                                       ; +0x61, 0x1800025b1\njle     loc_180002678                                                  ; +0x64, 0x1800025b4\nxor     ebx, ebx                                                       ; +0x6a, 0x1800025ba\nmov     r10, rcx                                                       ; +0x6c, 0x1800025bc\nnop                                                                    ; +0x6f, 0x1800025bf\nmovsx   r8, byte ptr [rbx+r14]                                         ; +0x70, 0x1800025c0\ntest    r8d, r8d                                                       ; +0x75, 0x1800025c5\njle     loc_180002664                                                  ; +0x78, 0x1800025c8\nmov     r9d, dword ptr [rsp+r8*4+0B8h+var_B8]                          ; +0x7e, 0x1800025ce\nmov     rdx, r8                                                        ; +0x82, 0x1800025d2\ncmp     r8d, 20h ; ' '                                                 ; +0x85, 0x1800025d5\njge     short loc_1800025EB                                            ; +0x89, 0x1800025d9\nmov     eax, r9d                                                       ; +0x8b, 0x1800025db\nmov     ecx, r8d                                                       ; +0x8e, 0x1800025de\nshr     eax, cl                                                        ; +0x91, 0x1800025e1\ntest    eax, eax                                                       ; +0x93, 0x1800025e3\njnz     loc_18000272F                                                  ; +0x95, 0x1800025e5\nmov     [r10], r9d                                                     ; +0x9b, 0x1800025eb\nmov     ecx, r8d                                                       ; +0x9e, 0x1800025ee\nadd     r10, 4                                                         ; +0xa1, 0x1800025f1\ntest    r8d, r8d                                                       ; +0xa5, 0x1800025f5\njle     short loc_18000262F                                            ; +0xa8, 0x1800025f8\nnop     word ptr [rax+rax+00h]                                         ; +0xaa, 0x1800025fa\nmov     eax, dword ptr [rsp+rdx*4+0B8h+var_B8]                         ; +0xb0, 0x180002600\ntest    al, 1                                                          ; +0xb3, 0x180002603\njnz     short loc_180002618                                            ; +0xb5, 0x180002605\ninc     eax                                                            ; +0xb7, 0x180002607\ndec     ecx                                                            ; +0xb9, 0x180002609\nmov     dword ptr [rsp+rdx*4+0B8h+var_B8], eax                         ; +0xbb, 0x18000260b\ndec     rdx                                                            ; +0xbe, 0x18000260e\ntest    rdx, rdx                                                       ; +0xc1, 0x180002611\njg      short loc_180002600                                            ; +0xc4, 0x180002614\njmp     short loc_18000262F                                            ; +0xc6, 0x180002616\ncmp     ecx, 1                                                         ; +0xc8, 0x180002618\njnz     short loc_180002623                                            ; +0xcb, 0x18000261b\ninc     dword ptr [rsp+0B8h+var_B8+4]                                  ; +0xcd, 0x18000261d\njmp     short loc_18000262F                                            ; +0xd1, 0x180002621\nmovsxd  rcx, ecx                                                       ; +0xd3, 0x180002623\nmov     eax, [rsp+rcx*4+0B8h+var_BC]                                   ; +0xd6, 0x180002626\nadd     eax, eax                                                       ; +0xda, 0x18000262a\nmov     dword ptr [rsp+rcx*4+0B8h+var_B8], eax                         ; +0xdc, 0x18000262c\nlea     edx, [r8+1]                                                    ; +0xdf, 0x18000262f\ncmp     edx, 21h ; '!'                                                 ; +0xe3, 0x180002633\njge     short loc_18000266C                                            ; +0xe6, 0x180002636\nmovsxd  rax, edx                                                       ; +0xe8, 0x180002638\nlea     rax, [rsp+rax*4+0B8h+var_B8]                                   ; +0xeb, 0x18000263b\nnop                                                                    ; +0xef, 0x18000263f\nmov     r8d, [rax]                                                     ; +0xf0, 0x180002640\nmov     ecx, r8d                                                       ; +0xf3, 0x180002643\nshr     ecx, 1                                                         ; +0xf6, 0x180002646\ncmp     ecx, r9d                                                       ; +0xf8, 0x180002648\njnz     short loc_18000266C                                            ; +0xfb, 0x18000264b\nmov     ecx, [rax-4]                                                   ; +0xfd, 0x18000264d\ninc     edx                                                            ; +0x100, 0x180002650\nadd     ecx, ecx                                                       ; +0x102, 0x180002652\nmov     r9d, r8d                                                       ; +0x104, 0x180002654\nmov     [rax], ecx                                                     ; +0x107, 0x180002657\nadd     rax, 4                                                         ; +0x109, 0x180002659\ncmp     edx, 21h ; '!'                                                 ; +0x10d, 0x18000265d\njl      short loc_180002640                                            ; +0x110, 0x180002660\njmp     short loc_18000266C                                            ; +0x112, 0x180002662\ntest    ebp, ebp                                                       ; +0x114, 0x180002664\njnz     short loc_18000266C                                            ; +0x116, 0x180002666\nadd     r10, 4                                                         ; +0x118, 0x180002668\ninc     rbx                                                            ; +0x11c, 0x18000266c\ncmp     rbx, rsi                                                       ; +0x11f, 0x18000266f\njl      loc_1800025C0                                                  ; +0x122, 0x180002672\ncmp     ebp, 1                                                         ; +0x128, 0x180002678\njz      short loc_1800026AB                                            ; +0x12b, 0x18000267b\nmov     edx, 1                                                         ; +0x12d, 0x18000267d\nmov     ecx, 1Fh                                                       ; +0x132, 0x180002682\nnop     word ptr [rax+rax+00000000h]                                   ; +0x137, 0x180002687\nmov     eax, 0FFFFFFFFh                                                ; +0x140, 0x180002690\nshr     eax, cl                                                        ; +0x145, 0x180002695\ntest    dword ptr [rsp+rdx*4+0B8h+var_B8], eax                         ; +0x147, 0x180002697\njnz     loc_18000272F                                                  ; +0x14a, 0x18000269a\ndec     ecx                                                            ; +0x150, 0x1800026a0\ninc     rdx                                                            ; +0x152, 0x1800026a2\ncmp     rdx, 21h ; '!'                                                 ; +0x155, 0x1800026a5\njl      short loc_180002690                                            ; +0x159, 0x1800026a9\ntest    rsi, rsi                                                       ; +0x15b, 0x1800026ab\njle     short loc_180002709                                            ; +0x15e, 0x1800026ae\nmov     [rsp+0B8h+arg_10], rdi                                         ; +0x160, 0x1800026b0\nxor     r9d, r9d                                                       ; +0x168, 0x1800026b8\nnop     dword ptr [rax+rax+00h]                                        ; +0x16b, 0x1800026bb\nmovsx   edi, byte ptr [r9+r14]                                         ; +0x170, 0x1800026c0\nxor     r8d, r8d                                                       ; +0x175, 0x1800026c5\nxor     ecx, ecx                                                       ; +0x178, 0x1800026c8\ntest    dil, dil                                                       ; +0x17a, 0x1800026ca\njle     short loc_1800026E9                                            ; +0x17d, 0x1800026cd\nmov     ebx, [r11]                                                     ; +0x17f, 0x1800026cf\nlea     eax, [r8+r8]                                                   ; +0x182, 0x1800026d2\nmov     edx, ebx                                                       ; +0x186, 0x1800026d6\nshr     edx, cl                                                        ; +0x188, 0x1800026d8\ninc     ecx                                                            ; +0x18a, 0x1800026da\nand     edx, 1                                                         ; +0x18c, 0x1800026dc\nmov     r8d, edx                                                       ; +0x18f, 0x1800026df\nor      r8d, eax                                                       ; +0x192, 0x1800026e2\ncmp     ecx, edi                                                       ; +0x195, 0x1800026e5\njl      short loc_1800026D2                                            ; +0x197, 0x1800026e7\ntest    ebp, ebp                                                       ; +0x199, 0x1800026e9\njz      short loc_1800026F2                                            ; +0x19b, 0x1800026eb\ntest    dil, dil                                                       ; +0x19d, 0x1800026ed\njz      short loc_1800026F9                                            ; +0x1a0, 0x1800026f0\nmov     [r11], r8d                                                     ; +0x1a2, 0x1800026f2\nadd     r11, 4                                                         ; +0x1a5, 0x1800026f5\ninc     r9                                                             ; +0x1a9, 0x1800026f9\ncmp     r9, rsi                                                        ; +0x1ac, 0x1800026fc\njl      short loc_1800026C0                                            ; +0x1af, 0x1800026ff\nmov     rdi, [rsp+0B8h+arg_10]                                         ; +0x1b1, 0x180002701\nxor     eax, eax                                                       ; +0x1b9, 0x180002709\nmov     rcx, [rsp+0B8h+var_28]                                         ; +0x1bb, 0x18000270b\nxor     rcx, rsp; StackCookie                                          ; +0x1c3, 0x180002713\ncall    __security_check_cookie                                        ; +0x1c6, 0x180002716\nmov     rbx, [rsp+0B8h+arg_18]                                         ; +0x1cb, 0x18000271b\nadd     rsp, 0A0h                                                      ; +0x1d3, 0x180002723\npop     r14                                                            ; +0x1da, 0x18000272a\npop     rsi                                                            ; +0x1dc, 0x18000272c\npop     rbp                                                            ; +0x1dd, 0x18000272d\nretn                                                                   ; +0x1de, 0x18000272e\nmov     eax, 0FFFFFFFFh                                                ; +0x1df, 0x18000272f\njmp     short loc_18000270B                                            ; +0x1e4, 0x180002734", "xrefs": ["sub_180001E90 @ 0x180001f19", "<???> @ 0x18017d3a8", "<???> @ 0x18017d3b8", "<???> @ 0x1801f60fc"], "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"}