{"type": "func", "start": 6443649320, "end": 6443649843, "name": "__C_specific_handler", "pseudocode": "// \n// __C_specific_handler from 0x180124928 to 0x180124b33 (523 bytes)\n// \n// 51 xrefs:\n// > <???> @ 0x180190430\n// > <???> @ 0x18019046c\n// > <???> @ 0x1801904a0\n// > <???> @ 0x180191cfc\n// > <???> @ 0x180191dd0\n// > <???> @ 0x180191e0c\n// > <???> @ 0x180191e7c\n// > <???> @ 0x1801920a4\n// > <???> @ 0x180192234\n// > <???> @ 0x180192290\n// > <???> @ 0x180192300\n// > <???> @ 0x1801923e4\n// > <???> @ 0x180192420\n// > <???> @ 0x18019256c\n// > <???> @ 0x1801925a4\n// > <???> @ 0x180192ae8\n// > <???> @ 0x180192b40\n// > <???> @ 0x180192c10\n// > <???> @ 0x180192d0c\n// > <???> @ 0x180192d38\n// > <???> @ 0x180192e84\n// > <???> @ 0x180192eb0\n// > <???> @ 0x180192f40\n// > <???> @ 0x180193038\n// > <???> @ 0x180193274\n// > <???> @ 0x1801932a0\n// > <???> @ 0x1801932cc\n// > <???> @ 0x1801932f8\n// > <???> @ 0x180193484\n// > <???> @ 0x1801934dc\n// > <???> @ 0x180193504\n// > <???> @ 0x180193724\n// > <???> @ 0x180193778\n// > <???> @ 0x1801937a8\n// > <???> @ 0x1801937d4\n// > <???> @ 0x18019381c\n// > <???> @ 0x180193900\n// > <???> @ 0x18019393c\n// > <???> @ 0x180193978\n// > <???> @ 0x180193a64\n// > <???> @ 0x180193abc\n// > <???> @ 0x180193bc8\n// > <???> @ 0x180193cbc\n// > <???> @ 0x180193d20\n// > <???> @ 0x180193d48\n// > <???> @ 0x180193f8c\n// > <???> @ 0x180193fc4\n// > <???> @ 0x1801941a4\n// > <???> @ 0x180194204\n// > <???> @ 0x180194254\n// > <???> @ 0x180202690\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\nEXCEPTION_DISPOSITION __cdecl _C_specific_handler(\n        struct _EXCEPTION_RECORD *ExceptionRecord,\n        void *EstablisherFrame,\n        struct _CONTEXT *ContextRecord,\n        struct _DISPATCHER_CONTEXT *DispatcherContext)\n{\n  DWORD64 ImageBase; // r12\n  DWORD *HandlerData; // rbx\n  unsigned __int64 v10; // r14\n  DWORD ScopeIndex; // esi\n  int v12; // eax\n  DWORD v14; // r9d\n  unsigned __int64 v15; // rdi\n  DWORD v16; // r8d\n  __int64 v17; // rcx\n  DWORD i; // r10d\n  __int64 v19; // rax\n  _QWORD v20[2]; // [rsp+30h] [rbp-38h] BYREF\n\n  _except_validate_context_record(ContextRecord);\n  ImageBase = DispatcherContext->ImageBase;\n  HandlerData = (DWORD *)DispatcherContext->HandlerData;\n  v10 = DispatcherContext->ControlPc - ImageBase;\n  ScopeIndex = DispatcherContext->ScopeIndex;\n  if ( (ExceptionRecord->ExceptionFlags & 0x66) != 0 )\n  {\n    v14 = *HandlerData;\n    v15 = DispatcherContext->TargetIp - ImageBase;\n    if ( ScopeIndex < *HandlerData )\n    {\n      v16 = *HandlerData;\n      do\n      {\n        v17 = v16;\n        if ( v10 >= HandlerData[4 * ScopeIndex + 1] && v10 < HandlerData[4 * ScopeIndex + 2] )\n        {\n          if ( (ExceptionRecord->ExceptionFlags & 0x20) != 0 )\n          {\n            for ( i = 0; i < v16; ++i )\n            {\n              if ( v15 >= HandlerData[4 * i + 1]\n                && v15 < HandlerData[4 * i + 2]\n                && HandlerData[4 * i + 4] == HandlerData[4 * ScopeIndex + 4]\n                && HandlerData[4 * i + 3] == HandlerData[4 * ScopeIndex + 3] )\n              {\n                break;\n              }\n            }\n            v17 = v14;\n            if ( i != v14 )\n              return ExceptionContinueSearch;\n          }\n          v19 = HandlerData[4 * ScopeIndex + 4];\n          if ( (_DWORD)v19 )\n          {\n            if ( v15 == v19 && (ExceptionRecord->ExceptionFlags & 0x20) != 0 )\n              return ExceptionContinueSearch;\n          }\n          else\n          {\n            LOBYTE(v17) = 1;\n            DispatcherContext->ScopeIndex = ScopeIndex + 1;\n            ((void (__fastcall *)(__int64, void *))(ImageBase + HandlerData[4 * ScopeIndex + 3]))(v17, EstablisherFrame);\n            v14 = *HandlerData;\n            LODWORD(v17) = *HandlerData;\n          }\n        }\n        ++ScopeIndex;\n        v16 = v17;\n      }\n      while ( ScopeIndex < (unsigned int)v17 );\n    }\n  }\n  else\n  {\n    v20[0] = ExceptionRecord;\n    v20[1] = ContextRecord;\n    while ( ScopeIndex < *HandlerData )\n    {\n      if ( v10 >= HandlerData[4 * ScopeIndex + 1]\n        && v10 < HandlerData[4 * ScopeIndex + 2]\n        && HandlerData[4 * ScopeIndex + 4] )\n      {\n        if ( HandlerData[4 * ScopeIndex + 3] == 1 )\n          goto LABEL_11;\n        v12 = ((__int64 (__fastcall *)(_QWORD *, void *))(ImageBase + HandlerData[4 * ScopeIndex + 3]))(\n                v20,\n                EstablisherFrame);\n        if ( v12 < 0 )\n          return ExceptionContinueExecution;\n        if ( v12 > 0 )\n        {\nLABEL_11:\n          if ( ExceptionRecord->ExceptionCode == -529697949 && _DestructExceptionObject )\n          {\n            if ( (unsigned int)IsNonwritableInCurrentImage(&off_18016FC30) )\n              _DestructExceptionObject(ExceptionRecord, 1);\n          }\n          NLG_Notify(ImageBase + HandlerData[4 * ScopeIndex + 4], EstablisherFrame, 1);\n          RtlUnwindEx(\n            EstablisherFrame,\n            (PVOID)(ImageBase + HandlerData[4 * ScopeIndex + 4]),\n            ExceptionRecord,\n            (PVOID)ExceptionRecord->ExceptionCode,\n            DispatcherContext->ContextRecord,\n            DispatcherContext->HistoryTable);\n          nullsub_4();\n        }\n      }\n      ++ScopeIndex;\n    }\n  }\n  return ExceptionContinueSearch;\n}", "assembly": "; \n; __C_specific_handler from 0x180124928 to 0x180124b33 (523 bytes)\n; \n; 51 xrefs:\n; > <???> @ 0x180190430\n; > <???> @ 0x18019046c\n; > <???> @ 0x1801904a0\n; > <???> @ 0x180191cfc\n; > <???> @ 0x180191dd0\n; > <???> @ 0x180191e0c\n; > <???> @ 0x180191e7c\n; > <???> @ 0x1801920a4\n; > <???> @ 0x180192234\n; > <???> @ 0x180192290\n; > <???> @ 0x180192300\n; > <???> @ 0x1801923e4\n; > <???> @ 0x180192420\n; > <???> @ 0x18019256c\n; > <???> @ 0x1801925a4\n; > <???> @ 0x180192ae8\n; > <???> @ 0x180192b40\n; > <???> @ 0x180192c10\n; > <???> @ 0x180192d0c\n; > <???> @ 0x180192d38\n; > <???> @ 0x180192e84\n; > <???> @ 0x180192eb0\n; > <???> @ 0x180192f40\n; > <???> @ 0x180193038\n; > <???> @ 0x180193274\n; > <???> @ 0x1801932a0\n; > <???> @ 0x1801932cc\n; > <???> @ 0x1801932f8\n; > <???> @ 0x180193484\n; > <???> @ 0x1801934dc\n; > <???> @ 0x180193504\n; > <???> @ 0x180193724\n; > <???> @ 0x180193778\n; > <???> @ 0x1801937a8\n; > <???> @ 0x1801937d4\n; > <???> @ 0x18019381c\n; > <???> @ 0x180193900\n; > <???> @ 0x18019393c\n; > <???> @ 0x180193978\n; > <???> @ 0x180193a64\n; > <???> @ 0x180193abc\n; > <???> @ 0x180193bc8\n; > <???> @ 0x180193cbc\n; > <???> @ 0x180193d20\n; > <???> @ 0x180193d48\n; > <???> @ 0x180193f8c\n; > <???> @ 0x180193fc4\n; > <???> @ 0x1801941a4\n; > <???> @ 0x180194204\n; > <???> @ 0x180194254\n; > <???> @ 0x180202690\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, 0x180124928\nmov     [rsp+arg_8], rbp                                               ; +0x5, 0x18012492d\nmov     [rsp+arg_10], rsi                                              ; +0xa, 0x180124932\npush    rdi                                                            ; +0xf, 0x180124937\npush    r12                                                            ; +0x10, 0x180124938\npush    r13                                                            ; +0x12, 0x18012493a\npush    r14                                                            ; +0x14, 0x18012493c\npush    r15                                                            ; +0x16, 0x18012493e\nsub     rsp, 40h                                                       ; +0x18, 0x180124940\nmov     rbp, rcx                                                       ; +0x1c, 0x180124944\nmov     r15, r9                                                        ; +0x1f, 0x180124947\nmov     rcx, r8                                                        ; +0x22, 0x18012494a\nmov     rdi, r8                                                        ; +0x25, 0x18012494d\nmov     r13, rdx                                                       ; +0x28, 0x180124950\ncall    __except_validate_context_record                               ; +0x2b, 0x180124953\nmov     r12, [r15+8]                                                   ; +0x30, 0x180124958\nmov     r14, [r15]                                                     ; +0x34, 0x18012495c\nmov     rbx, [r15+38h]                                                 ; +0x37, 0x18012495f\nsub     r14, r12                                                       ; +0x3b, 0x180124963\ntest    byte ptr [rbp+4], 66h                                          ; +0x3e, 0x180124966\nmov     esi, [r15+48h]                                                 ; +0x42, 0x18012496a\njnz     loc_180124A50                                                  ; +0x46, 0x18012496e\nmov     [rsp+68h+var_38], rbp                                          ; +0x4c, 0x180124974\nmov     [rsp+68h+var_30], rdi                                          ; +0x51, 0x180124979\ncmp     esi, [rbx]                                                     ; +0x56, 0x18012497e\njnb     loc_180124B10                                                  ; +0x58, 0x180124980\nmov     edi, esi                                                       ; +0x5e, 0x180124986\nadd     rdi, rdi                                                       ; +0x60, 0x180124988\nmov     eax, [rbx+rdi*8+4]                                             ; +0x63, 0x18012498b\ncmp     r14, rax                                                       ; +0x67, 0x18012498f\njb      loc_180124A42                                                  ; +0x6a, 0x180124992\nmov     eax, [rbx+rdi*8+8]                                             ; +0x70, 0x180124998\ncmp     r14, rax                                                       ; +0x74, 0x18012499c\njnb     loc_180124A42                                                  ; +0x77, 0x18012499f\ncmp     dword ptr [rbx+rdi*8+10h], 0                                   ; +0x7d, 0x1801249a5\njz      loc_180124A42                                                  ; +0x82, 0x1801249aa\ncmp     dword ptr [rbx+rdi*8+0Ch], 1                                   ; +0x88, 0x1801249b0\njz      short loc_1801249CE                                            ; +0x8d, 0x1801249b5\nmov     eax, [rbx+rdi*8+0Ch]                                           ; +0x8f, 0x1801249b7\nlea     rcx, [rsp+68h+var_38]                                          ; +0x93, 0x1801249bb\nadd     rax, r12                                                       ; +0x98, 0x1801249c0\nmov     rdx, r13                                                       ; +0x9b, 0x1801249c3\ncall    rax                                                            ; +0x9e, 0x1801249c6\ntest    eax, eax                                                       ; +0xa0, 0x1801249c8\njs      short loc_180124A49                                            ; +0xa2, 0x1801249ca\njle     short loc_180124A42                                            ; +0xa4, 0x1801249cc\ncmp     dword ptr [rbp+0], 0E06D7363h                                  ; +0xa6, 0x1801249ce\njnz     short loc_1801249FF                                            ; +0xad, 0x1801249d5\ncmp     cs:off_18016FC30, 0                                            ; +0xaf, 0x1801249d7\njz      short loc_1801249FF                                            ; +0xb7, 0x1801249df\nlea     rcx, off_18016FC30                                             ; +0xb9, 0x1801249e1\ncall    _IsNonwritableInCurrentImage                                   ; +0xc0, 0x1801249e8\ntest    eax, eax                                                       ; +0xc5, 0x1801249ed\njz      short loc_1801249FF                                            ; +0xc7, 0x1801249ef\nmov     edx, 1                                                         ; +0xc9, 0x1801249f1\nmov     rcx, rbp                                                       ; +0xce, 0x1801249f6\ncall    cs:off_18016FC30                                               ; +0xd1, 0x1801249f9\nmov     ecx, [rbx+rdi*8+10h]                                           ; +0xd7, 0x1801249ff\nmov     r8d, 1                                                         ; +0xdb, 0x180124a03\nadd     rcx, r12                                                       ; +0xe1, 0x180124a09\nmov     rdx, r13                                                       ; +0xe4, 0x180124a0c\ncall    _NLG_Notify                                                    ; +0xe7, 0x180124a0f\nmov     rax, [r15+40h]                                                 ; +0xec, 0x180124a14\nmov     r8, rbp; ExceptionRecord                                       ; +0xf0, 0x180124a18\nmov     edx, [rbx+rdi*8+10h]                                           ; +0xf3, 0x180124a1b\nmov     rcx, r13; TargetFrame                                          ; +0xf7, 0x180124a1f\nmov     r9d, [rbp+0]; ReturnValue                                      ; +0xfa, 0x180124a22\nadd     rdx, r12; TargetIp                                             ; +0xfe, 0x180124a26\nmov     [rsp+68h+HistoryTable], rax; HistoryTable                      ; +0x101, 0x180124a29\nmov     rax, [r15+28h]                                                 ; +0x106, 0x180124a2e\nmov     [rsp+68h+ContextRecord], rax; ContextRecord                    ; +0x10a, 0x180124a32\ncall    cs:RtlUnwindEx                                                 ; +0x10f, 0x180124a37\ncall    nullsub_4                                                      ; +0x115, 0x180124a3d\ninc     esi                                                            ; +0x11a, 0x180124a42\njmp     loc_18012497E                                                  ; +0x11c, 0x180124a44\nxor     eax, eax                                                       ; +0x121, 0x180124a49\njmp     loc_180124B15                                                  ; +0x123, 0x180124a4b\nmov     rdi, [r15+20h]                                                 ; +0x128, 0x180124a50\nmov     r9d, [rbx]                                                     ; +0x12c, 0x180124a54\nsub     rdi, r12                                                       ; +0x12f, 0x180124a57\ncmp     esi, r9d                                                       ; +0x132, 0x180124a5a\njnb     loc_180124B10                                                  ; +0x135, 0x180124a5d\nmov     r8d, r9d                                                       ; +0x13b, 0x180124a63\nmov     edx, esi                                                       ; +0x13e, 0x180124a66\nmov     ecx, r8d                                                       ; +0x140, 0x180124a68\nadd     rdx, rdx                                                       ; +0x143, 0x180124a6b\nmov     eax, [rbx+rdx*8+4]                                             ; +0x146, 0x180124a6e\ncmp     r14, rax                                                       ; +0x14a, 0x180124a72\njb      loc_180124B03                                                  ; +0x14d, 0x180124a75\nmov     eax, [rbx+rdx*8+8]                                             ; +0x153, 0x180124a7b\ncmp     r14, rax                                                       ; +0x157, 0x180124a7f\njnb     short loc_180124B03                                            ; +0x15a, 0x180124a82\nmov     r11d, [rbp+4]                                                  ; +0x15c, 0x180124a84\nand     r11d, 20h                                                      ; +0x160, 0x180124a88\njz      short loc_180124AD2                                            ; +0x164, 0x180124a8c\nxor     r10d, r10d                                                     ; +0x166, 0x180124a8e\ntest    r8d, r8d                                                       ; +0x169, 0x180124a91\njz      short loc_180124ACA                                            ; +0x16c, 0x180124a94\nmov     ecx, r10d                                                      ; +0x16e, 0x180124a96\nadd     rcx, rcx                                                       ; +0x171, 0x180124a99\nmov     eax, [rbx+rcx*8+4]                                             ; +0x174, 0x180124a9c\ncmp     rdi, rax                                                       ; +0x178, 0x180124aa0\njb      short loc_180124AC2                                            ; +0x17b, 0x180124aa3\nmov     eax, [rbx+rcx*8+8]                                             ; +0x17d, 0x180124aa5\ncmp     rdi, rax                                                       ; +0x181, 0x180124aa9\njnb     short loc_180124AC2                                            ; +0x184, 0x180124aac\nmov     eax, [rbx+rdx*8+10h]                                           ; +0x186, 0x180124aae\ncmp     [rbx+rcx*8+10h], eax                                           ; +0x18a, 0x180124ab2\njnz     short loc_180124AC2                                            ; +0x18e, 0x180124ab6\nmov     eax, [rbx+rdx*8+0Ch]                                           ; +0x190, 0x180124ab8\ncmp     [rbx+rcx*8+0Ch], eax                                           ; +0x194, 0x180124abc\njz      short loc_180124ACA                                            ; +0x198, 0x180124ac0\ninc     r10d                                                           ; +0x19a, 0x180124ac2\ncmp     r10d, r8d                                                      ; +0x19d, 0x180124ac5\njb      short loc_180124A96                                            ; +0x1a0, 0x180124ac8\nmov     ecx, r9d                                                       ; +0x1a2, 0x180124aca\ncmp     r10d, r9d                                                      ; +0x1a5, 0x180124acd\njnz     short loc_180124B10                                            ; +0x1a8, 0x180124ad0\nmov     eax, [rbx+rdx*8+10h]                                           ; +0x1aa, 0x180124ad2\ntest    eax, eax                                                       ; +0x1ae, 0x180124ad6\njz      short loc_180124AE6                                            ; +0x1b0, 0x180124ad8\ncmp     rdi, rax                                                       ; +0x1b2, 0x180124ada\njnz     short loc_180124B03                                            ; +0x1b5, 0x180124add\ntest    r11d, r11d                                                     ; +0x1b7, 0x180124adf\njnz     short loc_180124B10                                            ; +0x1ba, 0x180124ae2\njmp     short loc_180124B03                                            ; +0x1bc, 0x180124ae4\nlea     eax, [rsi+1]                                                   ; +0x1be, 0x180124ae6\nmov     cl, 1                                                          ; +0x1c1, 0x180124ae9\nmov     [r15+48h], eax                                                 ; +0x1c3, 0x180124aeb\nmov     r8d, [rbx+rdx*8+0Ch]                                           ; +0x1c7, 0x180124aef\nmov     rdx, r13                                                       ; +0x1cc, 0x180124af4\nadd     r8, r12                                                        ; +0x1cf, 0x180124af7\ncall    r8                                                             ; +0x1d2, 0x180124afa\nmov     r9d, [rbx]                                                     ; +0x1d5, 0x180124afd\nmov     ecx, r9d                                                       ; +0x1d8, 0x180124b00\ninc     esi                                                            ; +0x1db, 0x180124b03\nmov     r8d, ecx                                                       ; +0x1dd, 0x180124b05\ncmp     esi, ecx                                                       ; +0x1e0, 0x180124b08\njb      loc_180124A66                                                  ; +0x1e2, 0x180124b0a\nmov     eax, 1                                                         ; +0x1e8, 0x180124b10\nlea     r11, [rsp+68h+var_28]                                          ; +0x1ed, 0x180124b15\nmov     rbx, [r11+30h]                                                 ; +0x1f2, 0x180124b1a\nmov     rbp, [r11+38h]                                                 ; +0x1f6, 0x180124b1e\nmov     rsi, [r11+40h]                                                 ; +0x1fa, 0x180124b22\nmov     rsp, r11                                                       ; +0x1fe, 0x180124b26\npop     r15                                                            ; +0x201, 0x180124b29\npop     r14                                                            ; +0x203, 0x180124b2b\npop     r13                                                            ; +0x205, 0x180124b2d\npop     r12                                                            ; +0x207, 0x180124b2f\npop     rdi                                                            ; +0x209, 0x180124b31\nretn                                                                   ; +0x20a, 0x180124b32", "xrefs": ["<???> @ 0x180190430", "<???> @ 0x18019046c", "<???> @ 0x1801904a0", "<???> @ 0x180191cfc", "<???> @ 0x180191dd0", "<???> @ 0x180191e0c", "<???> @ 0x180191e7c", "<???> @ 0x1801920a4", "<???> @ 0x180192234", "<???> @ 0x180192290", "<???> @ 0x180192300", "<???> @ 0x1801923e4", "<???> @ 0x180192420", "<???> @ 0x18019256c", "<???> @ 0x1801925a4", "<???> @ 0x180192ae8", "<???> @ 0x180192b40", "<???> @ 0x180192c10", "<???> @ 0x180192d0c", "<???> @ 0x180192d38", "<???> @ 0x180192e84", "<???> @ 0x180192eb0", "<???> @ 0x180192f40", "<???> @ 0x180193038", "<???> @ 0x180193274", "<???> @ 0x1801932a0", "<???> @ 0x1801932cc", "<???> @ 0x1801932f8", "<???> @ 0x180193484", "<???> @ 0x1801934dc", "<???> @ 0x180193504", "<???> @ 0x180193724", "<???> @ 0x180193778", "<???> @ 0x1801937a8", "<???> @ 0x1801937d4", "<???> @ 0x18019381c", "<???> @ 0x180193900", "<???> @ 0x18019393c", "<???> @ 0x180193978", "<???> @ 0x180193a64", "<???> @ 0x180193abc", "<???> @ 0x180193bc8", "<???> @ 0x180193cbc", "<???> @ 0x180193d20", "<???> @ 0x180193d48", "<???> @ 0x180193f8c", "<???> @ 0x180193fc4", "<???> @ 0x1801941a4", "<???> @ 0x180194204", "<???> @ 0x180194254", "<???> @ 0x180202690"], "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"}