{"type": "func", "start": 6443645828, "end": 6443646159, "name": "__scrt_fastfail", "pseudocode": "// \n// __scrt_fastfail from 0x180123b84 to 0x180123ccf (331 bytes)\n// \n// 5 xrefs:\n// > __scrt_initialize_onexit_tables @ 0x1801206e1\n// > __scrt_initialize_thread_safe_statics @ 0x1801208ee\n// > dllmain_crt_process_attach @ 0x180120beb\n// > dllmain_crt_process_detach @ 0x180120c70\n// > <???> @ 0x1802025e8\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 _scrt_fastfail(unsigned int a1)\n{\n  ULONG64 Rip; // rbx\n  struct _IMAGE_RUNTIME_FUNCTION_ENTRY *v3; // rax\n  bool v4; // bl\n  struct _EXCEPTION_POINTERS ExceptionInfo; // [rsp+40h] [rbp-C0h] BYREF\n  _QWORD v6[20]; // [rsp+50h] [rbp-B0h] BYREF\n  struct _CONTEXT ContextRecord; // [rsp+F0h] [rbp-10h] BYREF\n  DWORD64 retaddr; // [rsp+5C8h] [rbp+4C8h]\n  __int64 v9; // [rsp+5D0h] [rbp+4D0h] BYREF\n  unsigned __int64 ImageBase; // [rsp+5D8h] [rbp+4D8h] BYREF\n  unsigned __int64 EstablisherFrame; // [rsp+5E0h] [rbp+4E0h] BYREF\n  PVOID HandlerData; // [rsp+5E8h] [rbp+4E8h] BYREF\n\n  if ( IsProcessorFeaturePresent(0x17u) )\n    __fastfail(a1);\n  sub_180123B7C();\n  memset(&ContextRecord, 0, sizeof(ContextRecord));\n  RtlCaptureContext(&ContextRecord);\n  Rip = ContextRecord.Rip;\n  v3 = RtlLookupFunctionEntry(ContextRecord.Rip, &ImageBase, nullptr);\n  if ( v3 )\n    RtlVirtualUnwind(0, ImageBase, Rip, v3, &ContextRecord, &HandlerData, &EstablisherFrame, nullptr);\n  ContextRecord.Rip = retaddr;\n  ContextRecord.Rsp = (DWORD64)&v9;\n  memset(v6, 0, 0x98u);\n  v6[2] = retaddr;\n  v6[0] = 0x140000015LL;\n  ExceptionInfo.ExceptionRecord = (PEXCEPTION_RECORD)v6;\n  v4 = IsDebuggerPresent();\n  ExceptionInfo.ContextRecord = &ContextRecord;\n  SetUnhandledExceptionFilter(nullptr);\n  if ( !UnhandledExceptionFilter(&ExceptionInfo) && !v4 )\n    sub_180123B7C();\n}", "assembly": "; \n; __scrt_fastfail from 0x180123b84 to 0x180123ccf (331 bytes)\n; \n; 5 xrefs:\n; > __scrt_initialize_onexit_tables @ 0x1801206e1\n; > __scrt_initialize_thread_safe_statics @ 0x1801208ee\n; > dllmain_crt_process_attach @ 0x180120beb\n; > dllmain_crt_process_detach @ 0x180120c70\n; > <???> @ 0x1802025e8\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-8+arg_0], rbx                                             ; +0x0, 0x180123b84\npush    rbp                                                            ; +0x5, 0x180123b89\nlea     rbp, [rsp-4C0h]                                                ; +0x6, 0x180123b8a\nsub     rsp, 5C0h                                                      ; +0xe, 0x180123b92\nmov     ebx, ecx                                                       ; +0x15, 0x180123b99\nmov     ecx, 17h; ProcessorFeature                                     ; +0x17, 0x180123b9b\ncall    cs:IsProcessorFeaturePresent                                   ; +0x1c, 0x180123ba0\ntest    eax, eax                                                       ; +0x22, 0x180123ba6\njz      short loc_180123BAE                                            ; +0x24, 0x180123ba8\nmov     ecx, ebx                                                       ; +0x26, 0x180123baa\nint     29h; Win8: RtlFailFast(ecx)                                    ; +0x28, 0x180123bac\nmov     ecx, 3                                                         ; +0x2a, 0x180123bae\ncall    sub_180123B7C                                                  ; +0x2f, 0x180123bb3\nxor     edx, edx; Val                                                  ; +0x34, 0x180123bb8\nlea     rcx, [rbp+4C0h+ContextRecord]; void *                          ; +0x36, 0x180123bba\nmov     r8d, 4D0h; Size                                                ; +0x3a, 0x180123bbe\ncall    memset                                                         ; +0x40, 0x180123bc4\nlea     rcx, [rbp+4C0h+ContextRecord]; ContextRecord                   ; +0x45, 0x180123bc9\ncall    cs:RtlCaptureContext                                           ; +0x49, 0x180123bcd\nmov     rbx, [rbp+4C0h+ContextRecord.Rip]                              ; +0x4f, 0x180123bd3\nlea     rdx, [rbp+4C0h+ImageBase]; ImageBase                           ; +0x56, 0x180123bda\nmov     rcx, rbx; ControlPc                                            ; +0x5d, 0x180123be1\nxor     r8d, r8d; HistoryTable                                         ; +0x60, 0x180123be4\ncall    cs:RtlLookupFunctionEntry                                      ; +0x63, 0x180123be7\ntest    rax, rax                                                       ; +0x69, 0x180123bed\njz      short loc_180123C2E                                            ; +0x6c, 0x180123bf0\nand     [rsp+5C0h+var_588], 0                                          ; +0x6e, 0x180123bf2\nlea     rcx, [rbp+4C0h+arg_10]                                         ; +0x74, 0x180123bf8\nmov     rdx, [rbp+4C0h+ImageBase]; ImageBase                           ; +0x7b, 0x180123bff\nmov     r9, rax; FunctionEntry                                         ; +0x82, 0x180123c06\nmov     [rsp+5C0h+EstablisherFrame], rcx; EstablisherFrame             ; +0x85, 0x180123c09\nmov     r8, rbx; ControlPc                                             ; +0x8a, 0x180123c0e\nlea     rcx, [rbp+4C0h+arg_18]                                         ; +0x8d, 0x180123c11\nmov     [rsp+5C0h+HandlerData], rcx; HandlerData                       ; +0x94, 0x180123c18\nlea     rcx, [rbp+4C0h+ContextRecord]                                  ; +0x99, 0x180123c1d\nmov     [rsp+5C0h+var_5A0], rcx; ContextRecord                         ; +0x9d, 0x180123c21\nxor     ecx, ecx; HandlerType                                          ; +0xa2, 0x180123c26\ncall    cs:RtlVirtualUnwind                                            ; +0xa4, 0x180123c28\nmov     rax, [rbp+4C8h]                                                ; +0xaa, 0x180123c2e\nlea     rcx, [rsp+5C0h+var_570]; void *                                ; +0xb1, 0x180123c35\nmov     [rbp+4C0h+ContextRecord.Rip], rax                              ; +0xb6, 0x180123c3a\nxor     edx, edx; Val                                                  ; +0xbd, 0x180123c41\nlea     rax, [rbp+4C8h]                                                ; +0xbf, 0x180123c43\nmov     r8d, 98h; Size                                                 ; +0xc6, 0x180123c4a\nadd     rax, 8                                                         ; +0xcc, 0x180123c50\nmov     [rbp+4C0h+ContextRecord.Rsp], rax                              ; +0xd0, 0x180123c54\ncall    memset                                                         ; +0xd7, 0x180123c5b\nmov     rax, [rbp+4C8h]                                                ; +0xdc, 0x180123c60\nmov     [rsp+5C0h+var_560], rax                                        ; +0xe3, 0x180123c67\nmov     [rsp+5C0h+var_570], 40000015h                                  ; +0xe8, 0x180123c6c\nmov     [rsp+5C0h+var_56C], 1                                          ; +0xf0, 0x180123c74\ncall    cs:IsDebuggerPresent                                           ; +0xf8, 0x180123c7c\ncmp     eax, 1                                                         ; +0xfe, 0x180123c82\nlea     rax, [rsp+5C0h+var_570]                                        ; +0x101, 0x180123c85\nmov     [rsp+5C0h+ExceptionInfo.ExceptionRecord], rax                  ; +0x106, 0x180123c8a\nlea     rax, [rbp+4C0h+ContextRecord]                                  ; +0x10b, 0x180123c8f\nsetz    bl                                                             ; +0x10f, 0x180123c93\nmov     [rsp+5C0h+ExceptionInfo.ContextRecord], rax                    ; +0x112, 0x180123c96\nxor     ecx, ecx; lpTopLevelExceptionFilter                            ; +0x117, 0x180123c9b\ncall    cs:SetUnhandledExceptionFilter                                 ; +0x119, 0x180123c9d\nlea     rcx, [rsp+5C0h+ExceptionInfo]; ExceptionInfo                   ; +0x11f, 0x180123ca3\ncall    cs:UnhandledExceptionFilter                                    ; +0x124, 0x180123ca8\ntest    eax, eax                                                       ; +0x12a, 0x180123cae\njnz     short loc_180123CBE                                            ; +0x12c, 0x180123cb0\ntest    bl, bl                                                         ; +0x12e, 0x180123cb2\njnz     short loc_180123CBE                                            ; +0x130, 0x180123cb4\nlea     ecx, [rax+3]                                                   ; +0x132, 0x180123cb6\ncall    sub_180123B7C                                                  ; +0x135, 0x180123cb9\nmov     rbx, [rsp+5C0h+arg_0]                                          ; +0x13a, 0x180123cbe\nadd     rsp, 5C0h                                                      ; +0x142, 0x180123cc6\npop     rbp                                                            ; +0x149, 0x180123ccd\nretn                                                                   ; +0x14a, 0x180123cce", "xrefs": ["__scrt_initialize_onexit_tables @ 0x1801206e1", "__scrt_initialize_thread_safe_statics @ 0x1801208ee", "dllmain_crt_process_attach @ 0x180120beb", "dllmain_crt_process_detach @ 0x180120c70", "<???> @ 0x1802025e8"], "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"}