{"type": "func", "start": 6443658000, "end": 6443658394, "name": "__FrameHandler3::FrameUnwindToState", "pseudocode": "// \n// __FrameHandler3::FrameUnwindToState from 0x180126b10 to 0x180126c9a (394 bytes)\n// \n// 3 xrefs:\n// > __FrameHandler3::FrameUnwindToEmptyState @ 0x1801253e3\n// > __InternalCxxFrameHandler<__FrameHandler3> @ 0x180126613\n// > <???> @ 0x180202948\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 __FrameHandler3::FrameUnwindToState(\n        unsigned __int64 *a1,\n        struct _xDISPATCHER_CONTEXT *a2,\n        const struct _s_FuncInfo *a3,\n        __ehstate_t a4)\n{\n  __int64 ImageBase; // r13\n  __ehstate_t CurrentState; // edi\n  __int64 v10; // rcx\n  __int64 v11; // rax\n  __int64 v12; // rcx\n  __int64 v13; // r14\n  __int64 v14; // rax\n  __int64 dispUnwindMap; // rcx\n  __int64 v16; // rax\n  __int64 v17; // rax\n  __int64 v18; // rcx\n  __int64 v19; // rbx\n  __int64 v20; // rax\n  __int64 v21; // rcx\n  __int64 v22; // rax\n  __int64 v23; // rcx\n  __int64 v24; // rax\n  __int64 v25; // rcx\n  __int64 v26; // rbx\n  __int64 v27; // rax\n  __int64 v28; // rcx\n  __int64 v29; // rax\n\n  ImageBase = GetImageBase((__int64)a1);\n  CurrentState = __FrameHandler3::GetCurrentState(a1, a2, a3);\n  v11 = _vcrt_getptd(v10);\n  ++*(_DWORD *)(v11 + 48);\n  while ( CurrentState != -1 && CurrentState > a4 )\n  {\n    if ( CurrentState <= -1 || CurrentState >= a3->maxState )\n      abort();\n    v13 = CurrentState;\n    v14 = GetImageBase(v12);\n    dispUnwindMap = a3->dispUnwindMap;\n    CurrentState = *(_DWORD *)(dispUnwindMap + v14 + 8LL * CurrentState);\n    v16 = GetImageBase(dispUnwindMap);\n    v12 = a3->dispUnwindMap;\n    if ( *(_DWORD *)(v12 + v16 + 8 * v13 + 4) )\n    {\n      v17 = GetImageBase(v12);\n      v18 = a3->dispUnwindMap;\n      v19 = *(int *)(v18 + v17 + 8 * v13 + 4);\n      v20 = v19 + GetImageBase(v18);\n    }\n    else\n    {\n      v20 = 0;\n    }\n    if ( v20 )\n    {\n      __FrameHandler3::SetState(a1, a3, CurrentState);\n      v22 = GetImageBase(v21);\n      v23 = a3->dispUnwindMap;\n      if ( *(_DWORD *)(v23 + v22 + 8 * v13 + 4) )\n      {\n        v24 = GetImageBase(v23);\n        v25 = a3->dispUnwindMap;\n        v26 = *(int *)(v25 + v24 + 8 * v13 + 4);\n        v27 = v26 + GetImageBase(v25);\n      }\n      else\n      {\n        v27 = 0;\n      }\n      CallSettingFrame(v27, a1, 259);\n      SetImageBase(ImageBase);\n    }\n  }\n  if ( *(int *)(_vcrt_getptd(v12) + 48) > 0 )\n  {\n    v29 = _vcrt_getptd(v28);\n    --*(_DWORD *)(v29 + 48);\n  }\n  if ( CurrentState != -1 && CurrentState > a4 )\n    abort();\n  __FrameHandler3::SetState(a1, a3, CurrentState);\n}", "assembly": "; \n; __FrameHandler3::FrameUnwindToState from 0x180126b10 to 0x180126c9a (394 bytes)\n; \n; 3 xrefs:\n; > __FrameHandler3::FrameUnwindToEmptyState @ 0x1801253e3\n; > __InternalCxxFrameHandler<__FrameHandler3> @ 0x180126613\n; > <???> @ 0x180202948\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_18], r9d                                              ; +0x0, 0x180126b10\nmov     [rsp+arg_10], r8                                               ; +0x5, 0x180126b15\nmov     [rsp+arg_0], rcx                                               ; +0xa, 0x180126b1a\npush    rbx                                                            ; +0xf, 0x180126b1f\npush    rsi                                                            ; +0x10, 0x180126b20\npush    rdi                                                            ; +0x11, 0x180126b21\npush    r12                                                            ; +0x12, 0x180126b22\npush    r13                                                            ; +0x14, 0x180126b24\npush    r14                                                            ; +0x16, 0x180126b26\npush    r15                                                            ; +0x18, 0x180126b28\nsub     rsp, 30h                                                       ; +0x1a, 0x180126b2a\nmov     r12d, r9d                                                      ; +0x1e, 0x180126b2e\nmov     rsi, r8                                                        ; +0x21, 0x180126b31\nmov     rbx, rdx                                                       ; +0x24, 0x180126b34\nmov     r15, rcx                                                       ; +0x27, 0x180126b37\ncall    _GetImageBase                                                  ; +0x2a, 0x180126b3a\nmov     r13, rax                                                       ; +0x2f, 0x180126b3f\nmov     [rsp+68h+var_40], rax                                          ; +0x32, 0x180126b42\nmov     r8, rsi; struct _s_FuncInfo *                                  ; +0x37, 0x180126b47\nmov     rdx, rbx; struct _xDISPATCHER_CONTEXT *                        ; +0x3a, 0x180126b4a\nmov     rcx, r15; unsigned __int64 *                                   ; +0x3d, 0x180126b4d\ncall    ?GetCurrentState@__FrameHandler3@@SAHPEA_KPEAU_xDISPATCHER_CONTEXT@@PEBU_s_FuncInfo@@@Z ; +0x40, 0x180126b50\nmov     edi, eax                                                       ; +0x45, 0x180126b55\ncall    __vcrt_getptd                                                  ; +0x47, 0x180126b57\ninc     dword ptr [rax+30h]                                            ; +0x4c, 0x180126b5c\ncmp     edi, 0FFFFFFFFh                                                ; +0x4f, 0x180126b5f\njz      loc_180126C53                                                  ; +0x52, 0x180126b62\ncmp     edi, r12d                                                      ; +0x58, 0x180126b68\njle     loc_180126C53                                                  ; +0x5b, 0x180126b6b\ncmp     edi, 0FFFFFFFFh                                                ; +0x61, 0x180126b71\njle     loc_180126C8E                                                  ; +0x64, 0x180126b74\ncmp     edi, [rsi+4]                                                   ; +0x6a, 0x180126b7a\njge     loc_180126C8E                                                  ; +0x6d, 0x180126b7d\nmovsxd  r14, edi                                                       ; +0x73, 0x180126b83\ncall    _GetImageBase                                                  ; +0x76, 0x180126b86\nmovsxd  rcx, dword ptr [rsi+8]                                         ; +0x7b, 0x180126b8b\nlea     rax, [rax+r14*8]                                               ; +0x7f, 0x180126b8f\nmov     edi, [rcx+rax]                                                 ; +0x83, 0x180126b93\nmov     [rsp+68h+var_48], edi                                          ; +0x86, 0x180126b96\ncall    _GetImageBase                                                  ; +0x8a, 0x180126b9a\nmovsxd  rcx, dword ptr [rsi+8]                                         ; +0x8f, 0x180126b9f\nlea     rax, [rax+r14*8]                                               ; +0x93, 0x180126ba3\ncmp     dword ptr [rcx+rax+4], 0                                       ; +0x97, 0x180126ba7\njz      short loc_180126BCA                                            ; +0x9c, 0x180126bac\ncall    _GetImageBase                                                  ; +0x9e, 0x180126bae\nmovsxd  rcx, dword ptr [rsi+8]                                         ; +0xa3, 0x180126bb3\nlea     rax, [rax+r14*8]                                               ; +0xa7, 0x180126bb7\nmovsxd  rbx, dword ptr [rcx+rax+4]                                     ; +0xab, 0x180126bbb\ncall    _GetImageBase                                                  ; +0xb0, 0x180126bc0\nadd     rax, rbx                                                       ; +0xb5, 0x180126bc5\njmp     short loc_180126BCC                                            ; +0xb8, 0x180126bc8\nxor     eax, eax                                                       ; +0xba, 0x180126bca\ntest    rax, rax                                                       ; +0xbc, 0x180126bcc\njz      short loc_180126C2A                                            ; +0xbf, 0x180126bcf\nmov     r8d, edi; int                                                  ; +0xc1, 0x180126bd1\nmov     rdx, rsi; struct _s_FuncInfo *                                 ; +0xc4, 0x180126bd4\nmov     rcx, r15; unsigned __int64 *                                   ; +0xc7, 0x180126bd7\ncall    ?SetState@__FrameHandler3@@SAXPEA_KPEBU_s_FuncInfo@@H@Z        ; +0xca, 0x180126bda\ncall    _GetImageBase                                                  ; +0xcf, 0x180126bdf\nmovsxd  rcx, dword ptr [rsi+8]                                         ; +0xd4, 0x180126be4\nlea     rax, [rax+r14*8]                                               ; +0xd8, 0x180126be8\ncmp     dword ptr [rcx+rax+4], 0                                       ; +0xdc, 0x180126bec\njz      short loc_180126C0F                                            ; +0xe1, 0x180126bf1\ncall    _GetImageBase                                                  ; +0xe3, 0x180126bf3\nmovsxd  rcx, dword ptr [rsi+8]                                         ; +0xe8, 0x180126bf8\nlea     rax, [rax+r14*8]                                               ; +0xec, 0x180126bfc\nmovsxd  rbx, dword ptr [rcx+rax+4]                                     ; +0xf0, 0x180126c00\ncall    _GetImageBase                                                  ; +0xf5, 0x180126c05\nadd     rax, rbx                                                       ; +0xfa, 0x180126c0a\njmp     short loc_180126C11                                            ; +0xfd, 0x180126c0d\nxor     eax, eax                                                       ; +0xff, 0x180126c0f\nmov     r8d, 103h                                                      ; +0x101, 0x180126c11\nmov     rdx, r15                                                       ; +0x107, 0x180126c17\nmov     rcx, rax                                                       ; +0x10a, 0x180126c1a\ncall    _CallSettingFrame                                              ; +0x10d, 0x180126c1d\nmov     rcx, r13                                                       ; +0x112, 0x180126c22\ncall    _SetImageBase                                                  ; +0x115, 0x180126c25\njmp     short loc_180126C4A                                            ; +0x11a, 0x180126c2a\nmov     r12d, [rsp+68h+arg_18]                                         ; +0x11c, 0x180126c2c\nmov     rsi, [rsp+68h+arg_10]                                          ; +0x124, 0x180126c34\nmov     r15, [rsp+68h+arg_0]                                           ; +0x12c, 0x180126c3c\nmov     r13, [rsp+68h+var_40]                                          ; +0x131, 0x180126c41\nmov     edi, [rsp+68h+var_48]                                          ; +0x136, 0x180126c46\nmov     [rsp+68h+var_44], edi                                          ; +0x13a, 0x180126c4a\njmp     loc_180126B5F                                                  ; +0x13e, 0x180126c4e\ncall    __vcrt_getptd                                                  ; +0x143, 0x180126c53\ncmp     dword ptr [rax+30h], 0                                         ; +0x148, 0x180126c58\njle     short loc_180126C66                                            ; +0x14c, 0x180126c5c\ncall    __vcrt_getptd                                                  ; +0x14e, 0x180126c5e\ndec     dword ptr [rax+30h]                                            ; +0x153, 0x180126c63\ncmp     edi, 0FFFFFFFFh                                                ; +0x156, 0x180126c66\njz      short loc_180126C70                                            ; +0x159, 0x180126c69\ncmp     edi, r12d                                                      ; +0x15b, 0x180126c6b\njg      short loc_180126C94                                            ; +0x15e, 0x180126c6e\nmov     r8d, edi; int                                                  ; +0x160, 0x180126c70\nmov     rdx, rsi; struct _s_FuncInfo *                                 ; +0x163, 0x180126c73\nmov     rcx, r15; unsigned __int64 *                                   ; +0x166, 0x180126c76\ncall    ?SetState@__FrameHandler3@@SAXPEA_KPEBU_s_FuncInfo@@H@Z        ; +0x169, 0x180126c79\nadd     rsp, 30h                                                       ; +0x16e, 0x180126c7e\npop     r15                                                            ; +0x172, 0x180126c82\npop     r14                                                            ; +0x174, 0x180126c84\npop     r13                                                            ; +0x176, 0x180126c86\npop     r12                                                            ; +0x178, 0x180126c88\npop     rdi                                                            ; +0x17a, 0x180126c8a\npop     rsi                                                            ; +0x17b, 0x180126c8b\npop     rbx                                                            ; +0x17c, 0x180126c8c\nretn                                                                   ; +0x17d, 0x180126c8d\ncall    abort                                                          ; +0x17e, 0x180126c8e\nalign 4                                                                ; +0x183, 0x180126c93\ncall    abort                                                          ; +0x184, 0x180126c94\nalign 2                                                                ; +0x189, 0x180126c99", "xrefs": ["__FrameHandler3::FrameUnwindToEmptyState @ 0x1801253e3", "__InternalCxxFrameHandler<__FrameHandler3> @ 0x180126613", "<???> @ 0x180202948"], "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"}