{"type": "func", "start": 6443655648, "end": 6443656181, "name": "FindHandlerForForeignException<__FrameHandler3>", "pseudocode": "// \n// FindHandlerForForeignException<__FrameHandler3> from 0x1801261e0 to 0x1801263f5 (533 bytes)\n// \n// 2 xrefs:\n// > FindHandler<__FrameHandler3> @ 0x18012615f\n// > <???> @ 0x1802028dc\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 FindHandlerForForeignException<__FrameHandler3>(\n        struct EHExceptionRecord *a1,\n        unsigned __int64 *a2,\n        struct _CONTEXT *a3,\n        struct _xDISPATCHER_CONTEXT *a4,\n        struct _s_FuncInfo *a5,\n        int a6,\n        int a7,\n        int a8)\n{\n  PVOID v11; // rbx\n  __int64 v12; // rcx\n  int v13; // r13d\n  __int64 v14; // r9\n  unsigned int v15; // r15d\n  __int64 v16; // rax\n  __int64 v17; // r8\n  __m128i v18; // xmm0\n  __int64 v19; // rcx\n  __int64 v20; // rcx\n  struct _s_HandlerType *v21; // rbx\n  __int64 dispType; // r13\n  __int64 v23; // rcx\n  __int64 v24; // rax\n  int v25; // [rsp+58h] [rbp-69h]\n  _QWORD v26[2]; // [rsp+68h] [rbp-59h] BYREF\n  __int128 v27; // [rsp+78h] [rbp-49h]\n  __int64 v28[2]; // [rsp+88h] [rbp-39h] BYREF\n  int v29; // [rsp+98h] [rbp-29h]\n  __int128 v30; // [rsp+A0h] [rbp-21h] BYREF\n  unsigned int v31; // [rsp+B8h] [rbp-9h]\n  __int64 v32; // [rsp+108h] [rbp+47h]\n\n  if ( a1->ExceptionCode != -2147483645 )\n  {\n    if ( !*(_QWORD *)(_vcrt_getptd((__int64)a1) + 16)\n      || (v11 = EncodePointer(nullptr), *(PVOID *)(_vcrt_getptd(v12) + 16) == v11)\n      || a1->ExceptionCode == -532459699 )\n    {\n      v13 = a7;\n    }\n    else\n    {\n      v13 = a7;\n      if ( a1->ExceptionCode != -532462766\n        && (unsigned int)unknown_libname_15(&a1->ExceptionCode, (__int64)a2, (__int64)a3) )\n      {\n        return;\n      }\n    }\n    v26[1] = a4->ImageBase;\n    v26[0] = a5;\n    if ( !a5->nTryBlocks )\n      abort();\n    __FrameHandler3::GetRangeOfTrysToCheck(&v30, (__int64)v26, a6, a4, a5);\n    v27 = v30;\n    if ( DWORD2(v30) < v31 )\n    {\n      v14 = v30;\n      v15 = DWORD2(v27);\n      v32 = v30;\n      do\n      {\n        v16 = *(_QWORD *)(v14 + 8);\n        v17 = *(int *)(*(_QWORD *)v27 + 16LL) + 20LL * v15;\n        v18 = *(__m128i *)(v17 + v16);\n        v19 = *(int *)(v17 + v16 + 16);\n        v29 = *(_DWORD *)(v17 + v16 + 16);\n        *(__m128i *)v28 = v18;\n        if ( _mm_cvtsi128_si32(v18) <= a6 && a6 <= SHIDWORD(v28[0]) )\n        {\n          v20 = a4->ImageBase + v19;\n          v21 = (struct _s_HandlerType *)(v20 + 20 * (HIDWORD(v28[1]) - 1));\n          if ( v21->dispType )\n          {\n            dispType = v21->dispType;\n            if ( dispType + GetImageBase(v20) )\n            {\n              v24 = (_DWORD)dispType ? v21->dispType + GetImageBase(v23) : 0LL;\n              if ( *(_BYTE *)(v24 + 16) )\n                goto LABEL_23;\n            }\n            v13 = a7;\n          }\n          if ( (v21->adjectives & 0x40) == 0 )\n          {\n            LOBYTE(v25) = 1;\n            CatchIt<__FrameHandler3>(a1, a2, a3, a4, a5, v21, 0, (int *)v28, v13, a8, v25, 0);\n          }\n        }\nLABEL_23:\n        v13 = a7;\n        ++v15;\n        v14 = v32;\n      }\n      while ( v15 < v31 );\n    }\n  }\n}", "assembly": "; \n; FindHandlerForForeignException<__FrameHandler3> from 0x1801261e0 to 0x1801263f5 (533 bytes)\n; \n; 2 xrefs:\n; > FindHandler<__FrameHandler3> @ 0x18012615f\n; > <???> @ 0x1802028dc\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, 0x1801261e0\nmov     [rax+20h], rbx                                                 ; +0x3, 0x1801261e3\nmov     [rax+18h], r8                                                  ; +0x7, 0x1801261e7\nmov     [rax+10h], rdx                                                 ; +0xb, 0x1801261eb\npush    rbp                                                            ; +0xf, 0x1801261ef\npush    rsi                                                            ; +0x10, 0x1801261f0\npush    rdi                                                            ; +0x11, 0x1801261f1\npush    r12                                                            ; +0x12, 0x1801261f2\npush    r13                                                            ; +0x14, 0x1801261f4\npush    r14                                                            ; +0x16, 0x1801261f6\npush    r15                                                            ; +0x18, 0x1801261f8\nlea     rbp, [rax-3Fh]                                                 ; +0x1a, 0x1801261fa\nsub     rsp, 0C0h                                                      ; +0x1e, 0x1801261fe\ncmp     dword ptr [rcx], 80000003h                                     ; +0x25, 0x180126205\nmov     rsi, r9                                                        ; +0x2b, 0x18012620b\nmov     r15, r8                                                        ; +0x2e, 0x18012620e\nmov     r14, rcx                                                       ; +0x31, 0x180126211\njz      short loc_180126284                                            ; +0x34, 0x180126214\ncall    __vcrt_getptd                                                  ; +0x36, 0x180126216\nmov     r12d, [rbp+37h+arg_28]                                         ; +0x3b, 0x18012621b\nmov     rdi, [rbp+37h+arg_20]                                          ; +0x3f, 0x18012621f\ncmp     qword ptr [rax+10h], 0                                         ; +0x43, 0x180126223\njz      short loc_18012629F                                            ; +0x48, 0x180126228\nxor     ecx, ecx; Ptr                                                  ; +0x4a, 0x18012622a\ncall    cs:EncodePointer                                               ; +0x4c, 0x18012622c\nmov     rbx, rax                                                       ; +0x52, 0x180126232\ncall    __vcrt_getptd                                                  ; +0x55, 0x180126235\ncmp     [rax+10h], rbx                                                 ; +0x5a, 0x18012623a\njz      short loc_18012629F                                            ; +0x5e, 0x18012623e\ncmp     dword ptr [r14], 0E0434F4Dh                                    ; +0x60, 0x180126240\njz      short loc_18012629F                                            ; +0x67, 0x180126247\ncmp     dword ptr [r14], 0E0434352h                                    ; +0x69, 0x180126249\nmov     r13d, [rbp+37h+arg_30]                                         ; +0x70, 0x180126250\njz      short loc_1801262A3                                            ; +0x74, 0x180126254\nmov     rax, qword ptr [rbp+37h+arg_38]                                ; +0x76, 0x180126256\nmov     r9, rsi                                                        ; +0x7a, 0x18012625a\nmov     rdx, [rbp+37h+arg_8]                                           ; +0x7d, 0x18012625d\nmov     r8, r15                                                        ; +0x81, 0x180126261\nmov     dword ptr [rsp+0F0h+var_B8], r12d                              ; +0x84, 0x180126264\nmov     rcx, r14                                                       ; +0x89, 0x180126269\nmov     [rsp+0F0h+var_C0], rax                                         ; +0x8c, 0x18012626c\nmov     dword ptr [rsp+0F0h+var_C8], r13d                              ; +0x91, 0x180126271\nmov     [rsp+0F0h+var_D0], rdi                                         ; +0x96, 0x180126276\ncall    unknown_libname_15; Microsoft VisualC v14 64bit runtime        ; +0x9b, 0x18012627b\ntest    eax, eax                                                       ; +0xa0, 0x180126280\njz      short loc_1801262A3                                            ; +0xa2, 0x180126282\nmov     rbx, [rsp+0F0h+arg_18]                                         ; +0xa4, 0x180126284\nadd     rsp, 0C0h                                                      ; +0xac, 0x18012628c\npop     r15                                                            ; +0xb3, 0x180126293\npop     r14                                                            ; +0xb5, 0x180126295\npop     r13                                                            ; +0xb7, 0x180126297\npop     r12                                                            ; +0xb9, 0x180126299\npop     rdi                                                            ; +0xbb, 0x18012629b\npop     rsi                                                            ; +0xbc, 0x18012629c\npop     rbp                                                            ; +0xbd, 0x18012629d\nretn                                                                   ; +0xbe, 0x18012629e\nmov     r13d, [rbp+37h+arg_30]                                         ; +0xbf, 0x18012629f\nmov     rax, [rsi+8]                                                   ; +0xc3, 0x1801262a3\nmov     [rbp+37h+var_88], rax                                          ; +0xc7, 0x1801262a7\nmov     [rbp+37h+var_90], rdi                                          ; +0xcb, 0x1801262ab\ncmp     dword ptr [rdi+0Ch], 0                                         ; +0xcf, 0x1801262af\njbe     loc_1801263EF                                                  ; +0xd3, 0x1801262b3\nmov     dword ptr [rsp+0F0h+var_C8], r13d                              ; +0xd9, 0x1801262b9\nlea     rdx, [rbp+37h+var_90]                                          ; +0xde, 0x1801262be\nmov     r9, rsi                                                        ; +0xe2, 0x1801262c2\nmov     [rsp+0F0h+var_D0], rdi                                         ; +0xe5, 0x1801262c5\nmov     r8d, r12d                                                      ; +0xea, 0x1801262ca\nlea     rcx, [rbp+37h+var_58]                                          ; +0xed, 0x1801262cd\ncall    ?GetRangeOfTrysToCheck@__FrameHandler3@@SA?AU?$pair@Viterator@TryBlockMap@__FrameHandler3@@V123@@std@@AEAVTryBlockMap@1@HPEAU_xDISPATCHER_CONTEXT@@PEBU_s_FuncInfo@@H@Z ; +0xf1, 0x1801262d1\nmovups  xmm0, [rbp+37h+var_58]                                         ; +0xf6, 0x1801262d6\nmovdqu  [rbp+37h+var_80], xmm0                                         ; +0xfa, 0x1801262da\npsrldq  xmm0, 8                                                        ; +0xff, 0x1801262df\nmovd    eax, xmm0                                                      ; +0x104, 0x1801262e4\ncmp     eax, [rbp+37h+var_40]                                          ; +0x108, 0x1801262e8\njnb     short loc_180126284                                            ; +0x10b, 0x1801262eb\nmov     r9, qword ptr [rbp+37h+var_58]                                 ; +0x10d, 0x1801262ed\nmov     r15d, dword ptr [rbp+37h+var_80+8]                             ; +0x111, 0x1801262f1\nmov     [rbp+37h+arg_0], r9                                            ; +0x115, 0x1801262f5\nmov     rax, qword ptr [rbp+37h+var_80]                                ; +0x119, 0x1801262f9\nmov     rax, [rax]                                                     ; +0x11d, 0x1801262fd\nmovsxd  rdx, dword ptr [rax+10h]                                       ; +0x120, 0x180126300\nmov     eax, r15d                                                      ; +0x124, 0x180126304\nlea     rcx, [rax+rax*4]                                               ; +0x127, 0x180126307\nmov     rax, [r9+8]                                                    ; +0x12b, 0x18012630b\nlea     r8, [rdx+rcx*4]                                                ; +0x12f, 0x18012630f\nmovups  xmm0, xmmword ptr [r8+rax]                                     ; +0x133, 0x180126313\nmovsxd  rcx, dword ptr [r8+rax+10h]                                    ; +0x138, 0x180126318\nmov     [rbp+37h+var_60], ecx                                          ; +0x13d, 0x18012631d\nmovd    eax, xmm0                                                      ; +0x140, 0x180126320\nmovups  xmmword ptr [rbp+37h+var_70], xmm0                             ; +0x144, 0x180126324\ncmp     eax, r12d                                                      ; +0x148, 0x180126328\njg      loc_1801263D5                                                  ; +0x14b, 0x18012632b\nmov     rax, [rbp+37h+var_70]                                          ; +0x151, 0x180126331\nshr     rax, 20h                                                       ; +0x155, 0x180126335\ncmp     r12d, eax                                                      ; +0x159, 0x180126339\njg      loc_1801263D5                                                  ; +0x15c, 0x18012633c\nadd     rcx, [rsi+8]                                                   ; +0x162, 0x180126342\nmov     rbx, [rbp+37h+var_70+8]                                        ; +0x166, 0x180126346\nshr     rbx, 20h                                                       ; +0x16a, 0x18012634a\ndec     rbx                                                            ; +0x16e, 0x18012634e\nlea     rbx, [rbx+rbx*4]                                               ; +0x171, 0x180126351\nlea     rbx, [rcx+rbx*4]                                               ; +0x175, 0x180126355\ncmp     dword ptr [rbx+4], 0                                           ; +0x179, 0x180126359\njz      short loc_18012638C                                            ; +0x17d, 0x18012635d\nmovsxd  r13, dword ptr [rbx+4]                                         ; +0x17f, 0x18012635f\ncall    _GetImageBase                                                  ; +0x183, 0x180126363\nadd     rax, r13                                                       ; +0x188, 0x180126368\njz      short loc_180126388                                            ; +0x18b, 0x18012636b\ntest    r13d, r13d                                                     ; +0x18d, 0x18012636d\njz      short loc_180126380                                            ; +0x190, 0x180126370\ncall    _GetImageBase                                                  ; +0x192, 0x180126372\nmovsxd  rcx, dword ptr [rbx+4]                                         ; +0x197, 0x180126377\nadd     rax, rcx                                                       ; +0x19b, 0x18012637b\njmp     short loc_180126382                                            ; +0x19e, 0x18012637e\nxor     eax, eax                                                       ; +0x1a0, 0x180126380\ncmp     byte ptr [rax+10h], 0                                          ; +0x1a2, 0x180126382\njnz     short loc_1801263D5                                            ; +0x1a6, 0x180126386\nmov     r13d, [rbp+37h+arg_30]                                         ; +0x1a8, 0x180126388\ntest    byte ptr [rbx], 40h                                            ; +0x1ac, 0x18012638c\njnz     short loc_1801263D5                                            ; +0x1af, 0x18012638f\nmov     rax, qword ptr [rbp+37h+arg_38]                                ; +0x1b1, 0x180126391\nmov     r9, rsi                                                        ; +0x1b5, 0x180126395\nmov     r8, [rbp+37h+arg_10]                                           ; +0x1b8, 0x180126398\nmov     rcx, r14; struct EHExceptionRecord *                           ; +0x1bc, 0x18012639c\nmov     rdx, [rbp+37h+arg_8]; unsigned __int64 *                       ; +0x1bf, 0x18012639f\nmov     byte ptr [rsp+58h], 0; char                                    ; +0x1c3, 0x1801263a3\nmov     byte ptr [rsp+0F0h+var_A0], 1; int                             ; +0x1c8, 0x1801263a8\nmov     qword ptr [rsp+0F0h+var_A8], rax; int                          ; +0x1cd, 0x1801263ad\nlea     rax, [rbp+37h+var_70]                                          ; +0x1d2, 0x1801263b2\nmov     [rsp+0F0h+var_B0], r13d; int                                   ; +0x1d6, 0x1801263b6\nmov     [rsp+0F0h+var_B8], rax; __int64                                ; +0x1db, 0x1801263bb\nand     [rsp+0F0h+var_C0], 0                                           ; +0x1e0, 0x1801263c0\nmov     [rsp+0F0h+var_C8], rbx; struct _s_HandlerType *                ; +0x1e6, 0x1801263c6\nmov     [rsp+0F0h+var_D0], rdi; struct _s_FuncInfo *                   ; +0x1eb, 0x1801263cb\ncall    ??$CatchIt@V__FrameHandler3@@@@YAXPEAUEHExceptionRecord@@PEA_KPEAU_CONTEXT@@PEAU_xDISPATCHER_CONTEXT@@PEBU_s_FuncInfo@@PEBU_s_HandlerType@@PEBU_s_CatchableType@@PEBU_s_TryBlockMapEntry@@H1EE@Z ; +0x1f0, 0x1801263d0\nmov     r13d, [rbp+37h+arg_30]                                         ; +0x1f5, 0x1801263d5\ninc     r15d                                                           ; +0x1f9, 0x1801263d9\nmov     r9, [rbp+37h+arg_0]                                            ; +0x1fc, 0x1801263dc\ncmp     r15d, [rbp+37h+var_40]                                         ; +0x200, 0x1801263e0\njb      loc_1801262F9                                                  ; +0x204, 0x1801263e4\njmp     loc_180126284                                                  ; +0x20a, 0x1801263ea\ncall    abort                                                          ; +0x20f, 0x1801263ef\ndb 0CCh                                                                ; +0x214, 0x1801263f4", "xrefs": ["FindHandler<__FrameHandler3> @ 0x18012615f", "<???> @ 0x1802028dc"], "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"}