{"type": "func", "start": 6443242944, "end": 6443243312, "name": "FMOD_OS_Thread_Create", "pseudocode": "// \n// FMOD_OS_Thread_Create from 0x1800c15c0 to 0x1800c1730 (368 bytes)\n// \n// 3 xrefs:\n// > sub_1800B8690 @ 0x1800b879e\n// > <???> @ 0x180194348\n// > <???> @ 0x1801fdbf0\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 FMOD_OS_Thread_Create(\n        __int64 a1,\n        __int64 a2,\n        __int64 a3,\n        DWORD_PTR a4,\n        int a5,\n        unsigned int StackSize,\n        _QWORD *a7)\n{\n  DWORD_PTR v8; // rbx\n  _QWORD *v12; // rax\n  void *v14; // rsi\n  int v15; // ecx\n  int v16; // edx\n\n  v8 = 0;\n  v12 = sub_1800B6530(\n          *((_QWORD *)off_1801AED20 + 52),\n          24,\n          \"C:\\\\buildagent1\\\\work\\\\570ad728b1678096\\\\core_api\\\\platforms\\\\win\\\\src\\\\fmod_os_misc.cpp\",\n          690,\n          0,\n          0,\n          1);\n  if ( !v12 )\n    return 38;\n  v12[2] = a1;\n  *v12 = a2;\n  v12[1] = a3;\n  v14 = (void *)beginthreadex(nullptr, StackSize, (_beginthreadex_proc_type)StartAddress, v12, 0, nullptr);\n  if ( !v14 )\n    return 28;\n  v15 = a5;\n  switch ( a5 )\n  {\n    case -32770:\n      v16 = -1;\n      break;\n    case -32771:\n      v16 = 0;\n      break;\n    case -32772:\n      v16 = 1;\n      break;\n    case -32773:\n      v16 = 2;\n      break;\n    default:\n      v16 = 15;\n      if ( a5 != -32774 )\n      {\n        if ( a5 == -32775 )\n          v15 = 15;\n        v16 = v15;\n      }\n      break;\n  }\n  if ( a4 != 0x4000000000000001LL && a4 != 0x4000000000000002LL )\n  {\n    if ( a4 == 0x4000000000000003LL )\n      a4 = 0;\n    v8 = a4;\n  }\n  if ( !SetThreadPriority(v14, v16) || v8 && !SetThreadAffinityMask(v14, v8) )\n    return 28;\n  *a7 = v14;\n  return 0;\n}", "assembly": "; \n; FMOD_OS_Thread_Create from 0x1800c15c0 to 0x1800c1730 (368 bytes)\n; \n; 3 xrefs:\n; > sub_1800B8690 @ 0x1800b879e\n; > <???> @ 0x180194348\n; > <???> @ 0x1801fdbf0\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, 0x1800c15c0\nmov     [rax+8], rbx                                                   ; +0x3, 0x1800c15c3\nmov     [rax+10h], rbp                                                 ; +0x7, 0x1800c15c7\nmov     [rax+18h], rsi                                                 ; +0xb, 0x1800c15cb\nmov     [rax+20h], rdi                                                 ; +0xf, 0x1800c15cf\npush    r14                                                            ; +0x13, 0x1800c15d3\nsub     rsp, 40h                                                       ; +0x15, 0x1800c15d5\nmov     r14, rcx                                                       ; +0x19, 0x1800c15d9\nmov     byte ptr [rax-18h], 1                                          ; +0x1c, 0x1800c15dc\nmov     rcx, cs:off_1801AED20                                          ; +0x20, 0x1800c15e0\nxor     ebx, ebx                                                       ; +0x27, 0x1800c15e7\nmov     rdi, r9                                                        ; +0x29, 0x1800c15e9\nmov     byte ptr [rax-20h], 0                                          ; +0x2c, 0x1800c15ec\nmov     rsi, r8                                                        ; +0x30, 0x1800c15f0\nmov     [rax-28h], ebx                                                 ; +0x33, 0x1800c15f3\nmov     rbp, rdx                                                       ; +0x36, 0x1800c15f6\nlea     r8, aCBuildagent1Wo_46; \"C:\\\\buildagent1\\\\work\\\\570ad728b1678096\"... ; +0x39, 0x1800c15f9\nmov     rcx, [rcx+1A0h]                                                ; +0x40, 0x1800c1600\nlea     edx, [rbx+18h]                                                 ; +0x47, 0x1800c1607\nmov     r9d, 2B2h                                                      ; +0x4a, 0x1800c160a\ncall    sub_1800B6530                                                  ; +0x50, 0x1800c1610\ntest    rax, rax                                                       ; +0x55, 0x1800c1615\njnz     short loc_1800C1622                                            ; +0x58, 0x1800c1618\nlea     eax, [rbx+26h]                                                 ; +0x5a, 0x1800c161a\njmp     loc_1800C1715                                                  ; +0x5d, 0x1800c161d\nmov     edx, [rsp+48h+StackSize]; StackSize                            ; +0x62, 0x1800c1622\nlea     r8, StartAddress; StartAddress                                 ; +0x66, 0x1800c1626\nmov     [rsp+48h+ThrdAddr], rbx; ThrdAddr                              ; +0x6d, 0x1800c162d\nmov     r9, rax; ArgList                                               ; +0x72, 0x1800c1632\nxor     ecx, ecx; Security                                             ; +0x75, 0x1800c1635\nmov     [rsp+48h+InitFlag], ebx; InitFlag                              ; +0x77, 0x1800c1637\nmov     [rax+10h], r14                                                 ; +0x7b, 0x1800c163b\nmov     [rax], rbp                                                     ; +0x7f, 0x1800c163f\nmov     [rax+8], rsi                                                   ; +0x82, 0x1800c1642\ncall    _beginthreadex                                                 ; +0x86, 0x1800c1646\nmov     rsi, rax                                                       ; +0x8b, 0x1800c164b\ntest    rax, rax                                                       ; +0x8e, 0x1800c164e\njz      loc_1800C1710                                                  ; +0x91, 0x1800c1651\nmov     ecx, [rsp+48h+arg_20]                                          ; +0x97, 0x1800c1657\ncmp     ecx, 0FFFF7FFEh                                                ; +0x9b, 0x1800c165b\njnz     short loc_1800C166A                                            ; +0xa1, 0x1800c1661\nmov     edx, 0FFFFFFFFh                                                ; +0xa3, 0x1800c1663\njmp     short loc_1800C16AC                                            ; +0xa8, 0x1800c1668\ncmp     ecx, 0FFFF7FFDh                                                ; +0xaa, 0x1800c166a\njnz     short loc_1800C1676                                            ; +0xb0, 0x1800c1670\nmov     edx, ebx                                                       ; +0xb2, 0x1800c1672\njmp     short loc_1800C16AC                                            ; +0xb4, 0x1800c1674\ncmp     ecx, 0FFFF7FFCh                                                ; +0xb6, 0x1800c1676\njnz     short loc_1800C1685                                            ; +0xbc, 0x1800c167c\nmov     edx, 1                                                         ; +0xbe, 0x1800c167e\njmp     short loc_1800C16AC                                            ; +0xc3, 0x1800c1683\ncmp     ecx, 0FFFF7FFBh                                                ; +0xc5, 0x1800c1685\njnz     short loc_1800C1694                                            ; +0xcb, 0x1800c168b\nmov     edx, 2                                                         ; +0xcd, 0x1800c168d\njmp     short loc_1800C16AC                                            ; +0xd2, 0x1800c1692\nmov     edx, 0Fh                                                       ; +0xd4, 0x1800c1694\ncmp     ecx, 0FFFF7FFAh                                                ; +0xd9, 0x1800c1699\njz      short loc_1800C16AC                                            ; +0xdf, 0x1800c169f\ncmp     ecx, 0FFFF7FF9h                                                ; +0xe1, 0x1800c16a1\ncmovz   ecx, edx                                                       ; +0xe7, 0x1800c16a7\nmov     edx, ecx; nPriority                                            ; +0xea, 0x1800c16aa\nmov     rax, 4000000000000001h                                         ; +0xec, 0x1800c16ac\ncmp     rdi, rax                                                       ; +0xf6, 0x1800c16b6\njz      short loc_1800C16DE                                            ; +0xf9, 0x1800c16b9\nmov     rax, 4000000000000002h                                         ; +0xfb, 0x1800c16bb\ncmp     rdi, rax                                                       ; +0x105, 0x1800c16c5\njz      short loc_1800C16DE                                            ; +0x108, 0x1800c16c8\nmov     rax, 4000000000000003h                                         ; +0x10a, 0x1800c16ca\ncmp     rdi, rax                                                       ; +0x114, 0x1800c16d4\ncmovz   rdi, rbx                                                       ; +0x117, 0x1800c16d7\nmov     rbx, rdi                                                       ; +0x11b, 0x1800c16db\nmov     rcx, rsi; hThread                                              ; +0x11e, 0x1800c16de\ncall    cs:SetThreadPriority                                           ; +0x121, 0x1800c16e1\ntest    eax, eax                                                       ; +0x127, 0x1800c16e7\njz      short loc_1800C1710                                            ; +0x129, 0x1800c16e9\ntest    rbx, rbx                                                       ; +0x12b, 0x1800c16eb\njz      short loc_1800C1701                                            ; +0x12e, 0x1800c16ee\nmov     rdx, rbx; dwThreadAffinityMask                                 ; +0x130, 0x1800c16f0\nmov     rcx, rsi; hThread                                              ; +0x133, 0x1800c16f3\ncall    cs:SetThreadAffinityMask                                       ; +0x136, 0x1800c16f6\ntest    rax, rax                                                       ; +0x13c, 0x1800c16fc\njz      short loc_1800C1710                                            ; +0x13f, 0x1800c16ff\nmov     rax, [rsp+48h+arg_30]                                          ; +0x141, 0x1800c1701\nmov     [rax], rsi                                                     ; +0x149, 0x1800c1709\nxor     eax, eax                                                       ; +0x14c, 0x1800c170c\njmp     short loc_1800C1715                                            ; +0x14e, 0x1800c170e\nmov     eax, 1Ch                                                       ; +0x150, 0x1800c1710\nmov     rbx, [rsp+48h+arg_0]                                           ; +0x155, 0x1800c1715\nmov     rbp, [rsp+48h+arg_8]                                           ; +0x15a, 0x1800c171a\nmov     rsi, [rsp+48h+arg_10]                                          ; +0x15f, 0x1800c171f\nmov     rdi, [rsp+48h+arg_18]                                          ; +0x164, 0x1800c1724\nadd     rsp, 40h                                                       ; +0x169, 0x1800c1729\npop     r14                                                            ; +0x16d, 0x1800c172d\nretn                                                                   ; +0x16f, 0x1800c172f", "xrefs": ["sub_1800B8690 @ 0x1800b879e", "<???> @ 0x180194348", "<???> @ 0x1801fdbf0"], "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"}