{"type": "func", "start": 6443650632, "end": 6443650823, "name": "__vcrt_getptd_noexit", "pseudocode": "// \n// __vcrt_getptd_noexit from 0x180124e48 to 0x180124f07 (191 bytes)\n// \n// 3 xrefs:\n// > Concurrency::details::ScheduleGroupSegmentBase::HasUnrealizedChores @ 0x180124b60\n// > __vcrt_getptd @ 0x180124e30\n// > <???> @ 0x180202750\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 _vcrt_getptd_noexit()\n{\n  DWORD LastError; // edi\n  __int64 Value; // rax\n  __int64 v3; // rsi\n  _DWORD *v4; // rax\n  DWORD v5; // ecx\n  _DWORD *v6; // rbx\n  _DWORD *v7; // rax\n\n  if ( dwTlsIndex == -1 )\n    return 0;\n  LastError = GetLastError();\n  Value = _vcrt_FlsGetValue(dwTlsIndex);\n  v3 = 0;\n  if ( Value != -1 )\n  {\n    if ( Value )\n    {\n      v3 = Value;\n      goto LABEL_13;\n    }\n    if ( !(unsigned int)_vcrt_FlsSetValue(dwTlsIndex, (LPVOID)0xFFFFFFFFFFFFFFFFLL) )\n      goto LABEL_13;\n    v4 = j__calloc_base(1u, 0x80u);\n    v5 = dwTlsIndex;\n    v6 = v4;\n    if ( v4 )\n    {\n      if ( (unsigned int)_vcrt_FlsSetValue(dwTlsIndex, v4) )\n      {\n        v7 = v6;\n        v6[30] = -2;\n        v6 = nullptr;\n        v3 = (__int64)v7;\nLABEL_12:\n        free(v6);\n        goto LABEL_13;\n      }\n      v5 = dwTlsIndex;\n    }\n    _vcrt_FlsSetValue(v5, nullptr);\n    goto LABEL_12;\n  }\nLABEL_13:\n  SetLastError(LastError);\n  return v3;\n}", "assembly": "; \n; __vcrt_getptd_noexit from 0x180124e48 to 0x180124f07 (191 bytes)\n; \n; 3 xrefs:\n; > Concurrency::details::ScheduleGroupSegmentBase::HasUnrealizedChores @ 0x180124b60\n; > __vcrt_getptd @ 0x180124e30\n; > <???> @ 0x180202750\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_0], rbx                                               ; +0x0, 0x180124e48\nmov     [rsp+arg_8], rsi                                               ; +0x5, 0x180124e4d\npush    rdi                                                            ; +0xa, 0x180124e52\nsub     rsp, 20h                                                       ; +0xb, 0x180124e53\ncmp     cs:dwTlsIndex, 0FFFFFFFFh                                      ; +0xf, 0x180124e57\njnz     short loc_180124E67                                            ; +0x16, 0x180124e5e\nxor     eax, eax                                                       ; +0x18, 0x180124e60\njmp     loc_180124EF7                                                  ; +0x1a, 0x180124e62\ncall    cs:GetLastError                                                ; +0x1f, 0x180124e67\nmov     ecx, cs:dwTlsIndex                                             ; +0x25, 0x180124e6d\nmov     edi, eax                                                       ; +0x2b, 0x180124e73\ncall    __vcrt_FlsGetValue                                             ; +0x2d, 0x180124e75\nor      rdx, 0FFFFFFFFFFFFFFFFh; lpTlsValue                            ; +0x32, 0x180124e7a\nxor     esi, esi                                                       ; +0x36, 0x180124e7e\ncmp     rax, rdx                                                       ; +0x38, 0x180124e80\njz      short loc_180124EEC                                            ; +0x3b, 0x180124e83\ntest    rax, rax                                                       ; +0x3d, 0x180124e85\njz      short loc_180124E8F                                            ; +0x40, 0x180124e88\nmov     rsi, rax                                                       ; +0x42, 0x180124e8a\njmp     short loc_180124EEC                                            ; +0x45, 0x180124e8d\nmov     ecx, cs:dwTlsIndex; dwTlsIndex                                 ; +0x47, 0x180124e8f\ncall    __vcrt_FlsSetValue                                             ; +0x4d, 0x180124e95\ntest    eax, eax                                                       ; +0x52, 0x180124e9a\njz      short loc_180124EEC                                            ; +0x54, 0x180124e9c\nmov     edx, 80h; Size                                                 ; +0x56, 0x180124e9e\nlea     ecx, [rdx-7Fh]; Count                                          ; +0x5b, 0x180124ea3\ncall    j__calloc_base                                                 ; +0x5e, 0x180124ea6\nmov     ecx, cs:dwTlsIndex; dwTlsIndex                                 ; +0x63, 0x180124eab\nmov     rbx, rax                                                       ; +0x69, 0x180124eb1\ntest    rax, rax                                                       ; +0x6c, 0x180124eb4\njz      short loc_180124EDD                                            ; +0x6f, 0x180124eb7\nmov     rdx, rax; lpTlsValue                                           ; +0x71, 0x180124eb9\ncall    __vcrt_FlsSetValue                                             ; +0x74, 0x180124ebc\ntest    eax, eax                                                       ; +0x79, 0x180124ec1\njz      short loc_180124ED7                                            ; +0x7b, 0x180124ec3\nmov     rax, rbx                                                       ; +0x7d, 0x180124ec5\nmov     dword ptr [rbx+78h], 0FFFFFFFEh                                ; +0x80, 0x180124ec8\nmov     rbx, rsi                                                       ; +0x87, 0x180124ecf\nmov     rsi, rax                                                       ; +0x8a, 0x180124ed2\njmp     short loc_180124EE4                                            ; +0x8d, 0x180124ed5\nmov     ecx, cs:dwTlsIndex; dwTlsIndex                                 ; +0x8f, 0x180124ed7\nxor     edx, edx; lpTlsValue                                           ; +0x95, 0x180124edd\ncall    __vcrt_FlsSetValue                                             ; +0x97, 0x180124edf\nmov     rcx, rbx; Block                                                ; +0x9c, 0x180124ee4\ncall    free                                                           ; +0x9f, 0x180124ee7\nmov     ecx, edi; dwErrCode                                            ; +0xa4, 0x180124eec\ncall    cs:SetLastError                                                ; +0xa6, 0x180124eee\nmov     rax, rsi                                                       ; +0xac, 0x180124ef4\nmov     rbx, [rsp+28h+arg_0]                                           ; +0xaf, 0x180124ef7\nmov     rsi, [rsp+28h+arg_8]                                           ; +0xb4, 0x180124efc\nadd     rsp, 20h                                                       ; +0xb9, 0x180124f01\npop     rdi                                                            ; +0xbd, 0x180124f05\nretn                                                                   ; +0xbe, 0x180124f06", "xrefs": ["Concurrency::details::ScheduleGroupSegmentBase::HasUnrealizedChores @ 0x180124b60", "__vcrt_getptd @ 0x180124e30", "<???> @ 0x180202750"], "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"}