{"type": "func", "start": 6443698864, "end": 6443699076, "name": "_beginthreadex", "pseudocode": "// \n// _beginthreadex from 0x180130ab0 to 0x180130b84 (212 bytes)\n// \n// 2 xrefs:\n// > FMOD_OS_Thread_Create @ 0x1800c1646\n// > <???> @ 0x180202e7c\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\nuintptr_t __cdecl beginthreadex(\n        void *Security,\n        unsigned int StackSize,\n        _beginthreadex_proc_type StartAddress,\n        void *ArgList,\n        unsigned int InitFlag,\n        unsigned int *ThrdAddr)\n{\n  SIZE_T v6; // rdi\n  struct __acrt_thread_parameter *thread_parameter; // rbx\n  HANDLE v10; // rdi\n  DWORD LastError; // eax\n  void *v12; // rcx\n  HMODULE v13; // rcx\n  DWORD ThreadId; // [rsp+50h] [rbp+18h] BYREF\n\n  v6 = StackSize;\n  if ( !StartAddress )\n  {\n    *errno() = 22;\n    invalid_parameter_noinfo();\n    return 0;\n  }\n  thread_parameter = create_thread_parameter((LPCWSTR)StartAddress, ArgList);\n  if ( thread_parameter )\n  {\n    v10 = CreateThread(\n            (LPSECURITY_ATTRIBUTES)Security,\n            v6,\n            (LPTHREAD_START_ROUTINE)unknown_libname_61,\n            thread_parameter,\n            InitFlag,\n            &ThreadId);\n    if ( v10 )\n    {\n      if ( ThrdAddr )\n        *ThrdAddr = ThreadId;\n      thread_parameter = nullptr;\n      goto LABEL_7;\n    }\n    LastError = GetLastError();\n    _acrt_errno_map_os_error(LastError);\n  }\n  v10 = nullptr;\nLABEL_7:\n  if ( thread_parameter )\n  {\n    v12 = *((void **)thread_parameter + 2);\n    if ( v12 )\n      CloseHandle(v12);\n    v13 = *((HMODULE *)thread_parameter + 3);\n    if ( v13 )\n      FreeLibrary(v13);\n    free_base(thread_parameter);\n  }\n  return (uintptr_t)v10;\n}", "assembly": "; \n; _beginthreadex from 0x180130ab0 to 0x180130b84 (212 bytes)\n; \n; 2 xrefs:\n; > FMOD_OS_Thread_Create @ 0x1800c1646\n; > <???> @ 0x180202e7c\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, 0x180130ab0\nmov     [rsp+arg_8], rsi                                               ; +0x5, 0x180130ab5\npush    rdi                                                            ; +0xa, 0x180130aba\nsub     rsp, 30h                                                       ; +0xb, 0x180130abb\nmov     edi, edx                                                       ; +0xf, 0x180130abf\nmov     rsi, rcx                                                       ; +0x11, 0x180130ac1\ntest    r8, r8                                                         ; +0x14, 0x180130ac4\njnz     short loc_180130AE0                                            ; +0x17, 0x180130ac7\ncall    _errno                                                         ; +0x19, 0x180130ac9\nmov     dword ptr [rax], 16h                                           ; +0x1e, 0x180130ace\ncall    _invalid_parameter_noinfo                                      ; +0x24, 0x180130ad4\nxor     eax, eax                                                       ; +0x29, 0x180130ad9\njmp     loc_180130B60                                                  ; +0x2b, 0x180130adb\nmov     rdx, r9; void *                                                ; +0x30, 0x180130ae0\nmov     rcx, r8; lpModuleName                                          ; +0x33, 0x180130ae3\ncall    ?create_thread_parameter@@YAPEAU__acrt_thread_parameter@@QEAX0@Z ; +0x36, 0x180130ae6\nmov     rbx, rax                                                       ; +0x3b, 0x180130aeb\ntest    rax, rax                                                       ; +0x3e, 0x180130aee\njz      short loc_180130B30                                            ; +0x41, 0x180130af1\nlea     rax, [rsp+38h+ThreadId]                                        ; +0x43, 0x180130af3\nmov     rdx, rdi; dwStackSize                                          ; +0x48, 0x180130af8\nmov     [rsp+38h+lpThreadId], rax; lpThreadId                          ; +0x4b, 0x180130afb\nlea     r8, unknown_libname_61; lpStartAddress                         ; +0x50, 0x180130b00\nmov     eax, [rsp+38h+InitFlag]                                        ; +0x57, 0x180130b07\nmov     r9, rbx; lpParameter                                           ; +0x5b, 0x180130b0b\nmov     rcx, rsi; lpThreadAttributes                                   ; +0x5e, 0x180130b0e\nmov     [rsp+38h+dwCreationFlags], eax; dwCreationFlags                ; +0x61, 0x180130b11\ncall    cs:CreateThread                                                ; +0x65, 0x180130b15\nmov     rdi, rax                                                       ; +0x6b, 0x180130b1b\ntest    rax, rax                                                       ; +0x6e, 0x180130b1e\njnz     short loc_180130B70                                            ; +0x71, 0x180130b21\ncall    cs:GetLastError                                                ; +0x73, 0x180130b23\nmov     ecx, eax                                                       ; +0x79, 0x180130b29\ncall    __acrt_errno_map_os_error                                      ; +0x7b, 0x180130b2b\nxor     edi, edi                                                       ; +0x80, 0x180130b30\ntest    rbx, rbx                                                       ; +0x82, 0x180130b32\njz      short loc_180130B5D                                            ; +0x85, 0x180130b35\nmov     rcx, [rbx+10h]; hObject                                        ; +0x87, 0x180130b37\ntest    rcx, rcx                                                       ; +0x8b, 0x180130b3b\njz      short loc_180130B46                                            ; +0x8e, 0x180130b3e\ncall    cs:CloseHandle                                                 ; +0x90, 0x180130b40\nmov     rcx, [rbx+18h]; hLibModule                                     ; +0x96, 0x180130b46\ntest    rcx, rcx                                                       ; +0x9a, 0x180130b4a\njz      short loc_180130B55                                            ; +0x9d, 0x180130b4d\ncall    cs:FreeLibrary                                                 ; +0x9f, 0x180130b4f\nmov     rcx, rbx; Block                                                ; +0xa5, 0x180130b55\ncall    _free_base                                                     ; +0xa8, 0x180130b58\nmov     rax, rdi                                                       ; +0xad, 0x180130b5d\nmov     rbx, [rsp+38h+arg_0]                                           ; +0xb0, 0x180130b60\nmov     rsi, [rsp+38h+arg_8]                                           ; +0xb5, 0x180130b65\nadd     rsp, 30h                                                       ; +0xba, 0x180130b6a\npop     rdi                                                            ; +0xbe, 0x180130b6e\nretn                                                                   ; +0xbf, 0x180130b6f\nmov     rcx, [rsp+38h+ThrdAddr]                                        ; +0xc0, 0x180130b70\ntest    rcx, rcx                                                       ; +0xc5, 0x180130b75\njz      short loc_180130B80                                            ; +0xc8, 0x180130b78\nmov     eax, [rsp+38h+ThreadId]                                        ; +0xca, 0x180130b7a\nmov     [rcx], eax                                                     ; +0xce, 0x180130b7e\nxor     ebx, ebx                                                       ; +0xd0, 0x180130b80\njmp     short loc_180130B32                                            ; +0xd2, 0x180130b82", "xrefs": ["FMOD_OS_Thread_Create @ 0x1800c1646", "<???> @ 0x180202e7c"], "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"}