{"type": "func", "start": 6442579712, "end": 6442579877, "name": "TlsCallback_1", "pseudocode": "// \n// TlsCallback_1 from 0x18001f700 to 0x18001f7a5 (165 bytes)\n// \n// 3 xrefs:\n// > <???> @ 0x1800232a8\n// > <???> @ 0x180023310\n// > <???> @ 0x18004b22c\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\nvoid __fastcall TlsCallback_1(__int64 a1, int a2)\n{\n  __int64 v2; // r14\n  _QWORD *v3; // rdi\n  int v4; // ebx\n  void (**v5)(void); // rsi\n  _QWORD *v6; // rbx\n\n  if ( a2 == 3 || !a2 )\n  {\n    v2 = *((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex);\n    v3 = *(_QWORD **)(v2 + 32);\n    if ( v3 )\n    {\n      while ( 1 )\n      {\n        v4 = *(_DWORD *)v3 - 1;\n        if ( v4 >= 0 )\n        {\n          v5 = (void (**)(void))&v3[v4 + 2];\n          do\n          {\n            if ( *v5 )\n              (*v5)();\n            --v5;\n            --v4;\n          }\n          while ( v4 >= 0 );\n        }\n        v6 = (_QWORD *)v3[1];\n        if ( !v6 )\n          break;\n        free(v3);\n        *(_QWORD *)(v2 + 32) = v6;\n        v3 = v6;\n      }\n      *(_QWORD *)(v2 + 32) = 0;\n    }\n  }\n}", "assembly": "; \n; TlsCallback_1 from 0x18001f700 to 0x18001f7a5 (165 bytes)\n; \n; 3 xrefs:\n; > <???> @ 0x1800232a8\n; > <???> @ 0x180023310\n; > <???> @ 0x18004b22c\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     rax, rsp                                                       ; +0x0, 0x18001f700\nmov     [rax+8], rbx                                                   ; +0x3, 0x18001f703\nmov     [rax+10h], rbp                                                 ; +0x7, 0x18001f707\nmov     [rax+18h], rsi                                                 ; +0xb, 0x18001f70b\nmov     [rax+20h], rdi                                                 ; +0xf, 0x18001f70f\npush    r14                                                            ; +0x13, 0x18001f713\nsub     rsp, 20h                                                       ; +0x15, 0x18001f715\ncmp     edx, 3                                                         ; +0x19, 0x18001f719\njz      short loc_18001F722                                            ; +0x1c, 0x18001f71c\ntest    edx, edx                                                       ; +0x1e, 0x18001f71e\njnz     short loc_18001F78A                                            ; +0x20, 0x18001f720\nmov     ecx, cs:TlsIndex                                               ; +0x22, 0x18001f722\nmov     rax, gs:58h                                                    ; +0x28, 0x18001f728\nmov     ebp, 20h ; ' '                                                 ; +0x31, 0x18001f731\nmov     r14, [rax+rcx*8]                                               ; +0x36, 0x18001f736\nmov     rdi, [r14+rbp]                                                 ; +0x3a, 0x18001f73a\ntest    rdi, rdi                                                       ; +0x3e, 0x18001f73e\njz      short loc_18001F78A                                            ; +0x41, 0x18001f741\nmov     ebx, [rdi]                                                     ; +0x43, 0x18001f743\nsub     ebx, 1                                                         ; +0x45, 0x18001f745\njs      short loc_18001F76C                                            ; +0x48, 0x18001f748\nmovsxd  rsi, ebx                                                       ; +0x4a, 0x18001f74a\nadd     rsi, 2                                                         ; +0x4d, 0x18001f74d\nlea     rsi, [rdi+rsi*8]                                               ; +0x51, 0x18001f751\nmov     rax, [rsi]                                                     ; +0x55, 0x18001f755\ntest    rax, rax                                                       ; +0x58, 0x18001f758\njz      short loc_18001F763                                            ; +0x5b, 0x18001f75b\ncall    cs:__guard_dispatch_icall_fptr                                 ; +0x5d, 0x18001f75d\nsub     rsi, 8                                                         ; +0x63, 0x18001f763\nsub     ebx, 1                                                         ; +0x67, 0x18001f767\njns     short loc_18001F755                                            ; +0x6a, 0x18001f76a\nmov     rbx, [rdi+8]                                                   ; +0x6c, 0x18001f76c\ntest    rbx, rbx                                                       ; +0x70, 0x18001f770\njz      short loc_18001F786                                            ; +0x73, 0x18001f773\nmov     rcx, rdi; Block                                                ; +0x75, 0x18001f775\ncall    free                                                           ; +0x78, 0x18001f778\nmov     [r14+rbp], rbx                                                 ; +0x7d, 0x18001f77d\nmov     rdi, rbx                                                       ; +0x81, 0x18001f781\njmp     short loc_18001F743                                            ; +0x84, 0x18001f784\nmov     [r14+rbp], rbx                                                 ; +0x86, 0x18001f786\nmov     rbx, [rsp+28h+arg_0]                                           ; +0x8a, 0x18001f78a\nmov     rbp, [rsp+28h+arg_8]                                           ; +0x8f, 0x18001f78f\nmov     rsi, [rsp+28h+arg_10]                                          ; +0x94, 0x18001f794\nmov     rdi, [rsp+28h+arg_18]                                          ; +0x99, 0x18001f799\nadd     rsp, 20h                                                       ; +0x9e, 0x18001f79e\npop     r14                                                            ; +0xa2, 0x18001f7a2\nretn                                                                   ; +0xa4, 0x18001f7a4", "xrefs": ["<???> @ 0x1800232a8", "<???> @ 0x180023310", "<???> @ 0x18004b22c"], "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"}