{"type": "func", "start": 6442581808, "end": 6442582136, "name": "__scrt_fastfail", "pseudocode": "// \n// __scrt_fastfail from 0x18001ff30 to 0x180020078 (328 bytes)\n// \n// 4 xrefs:\n// > __scrt_initialize_onexit_tables @ 0x18001f5bd\n// > dllmain_crt_process_attach @ 0x18001f9a7\n// > dllmain_crt_process_detach @ 0x18001fa28\n// > <???> @ 0x18004b2bc\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; // ebx\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_18001FF28();\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  v4 = IsDebuggerPresent();\n  ExceptionInfo.ExceptionRecord = (PEXCEPTION_RECORD)v6;\n  ExceptionInfo.ContextRecord = &ContextRecord;\n  SetUnhandledExceptionFilter(nullptr);\n  if ( !UnhandledExceptionFilter(&ExceptionInfo) && !v4 )\n    sub_18001FF28();\n}", "assembly": "; \n; __scrt_fastfail from 0x18001ff30 to 0x180020078 (328 bytes)\n; \n; 4 xrefs:\n; > __scrt_initialize_onexit_tables @ 0x18001f5bd\n; > dllmain_crt_process_attach @ 0x18001f9a7\n; > dllmain_crt_process_detach @ 0x18001fa28\n; > <???> @ 0x18004b2bc\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, 0x18001ff30\npush    rbp                                                            ; +0x5, 0x18001ff35\nlea     rbp, [rsp-4C0h]                                                ; +0x6, 0x18001ff36\nsub     rsp, 5C0h                                                      ; +0xe, 0x18001ff3e\nmov     ebx, ecx                                                       ; +0x15, 0x18001ff45\nmov     ecx, 17h; ProcessorFeature                                     ; +0x17, 0x18001ff47\ncall    cs:IsProcessorFeaturePresent                                   ; +0x1c, 0x18001ff4c\ntest    eax, eax                                                       ; +0x22, 0x18001ff52\njz      short loc_18001FF5A                                            ; +0x24, 0x18001ff54\nmov     ecx, ebx                                                       ; +0x26, 0x18001ff56\nint     29h; Win8: RtlFailFast(ecx)                                    ; +0x28, 0x18001ff58\nmov     ecx, 3                                                         ; +0x2a, 0x18001ff5a\ncall    sub_18001FF28                                                  ; +0x2f, 0x18001ff5f\nxor     edx, edx; Val                                                  ; +0x34, 0x18001ff64\nlea     rcx, [rbp+4C0h+ContextRecord]; void *                          ; +0x36, 0x18001ff66\nmov     r8d, 4D0h; Size                                                ; +0x3a, 0x18001ff6a\ncall    memset                                                         ; +0x40, 0x18001ff70\nlea     rcx, [rbp+4C0h+ContextRecord]; ContextRecord                   ; +0x45, 0x18001ff75\ncall    cs:RtlCaptureContext                                           ; +0x49, 0x18001ff79\nmov     rbx, [rbp+4C0h+ContextRecord.Rip]                              ; +0x4f, 0x18001ff7f\nlea     rdx, [rbp+4C0h+ImageBase]; ImageBase                           ; +0x56, 0x18001ff86\nmov     rcx, rbx; ControlPc                                            ; +0x5d, 0x18001ff8d\nxor     r8d, r8d; HistoryTable                                         ; +0x60, 0x18001ff90\ncall    cs:RtlLookupFunctionEntry                                      ; +0x63, 0x18001ff93\ntest    rax, rax                                                       ; +0x69, 0x18001ff99\njz      short loc_18001FFDA                                            ; +0x6c, 0x18001ff9c\nand     [rsp+5C0h+var_588], 0                                          ; +0x6e, 0x18001ff9e\nlea     rcx, [rbp+4C0h+arg_10]                                         ; +0x74, 0x18001ffa4\nmov     rdx, [rbp+4C0h+ImageBase]; ImageBase                           ; +0x7b, 0x18001ffab\nmov     r9, rax; FunctionEntry                                         ; +0x82, 0x18001ffb2\nmov     [rsp+5C0h+EstablisherFrame], rcx; EstablisherFrame             ; +0x85, 0x18001ffb5\nmov     r8, rbx; ControlPc                                             ; +0x8a, 0x18001ffba\nlea     rcx, [rbp+4C0h+arg_18]                                         ; +0x8d, 0x18001ffbd\nmov     [rsp+5C0h+HandlerData], rcx; HandlerData                       ; +0x94, 0x18001ffc4\nlea     rcx, [rbp+4C0h+ContextRecord]                                  ; +0x99, 0x18001ffc9\nmov     [rsp+5C0h+var_5A0], rcx; ContextRecord                         ; +0x9d, 0x18001ffcd\nxor     ecx, ecx; HandlerType                                          ; +0xa2, 0x18001ffd2\ncall    cs:RtlVirtualUnwind                                            ; +0xa4, 0x18001ffd4\nmov     rax, [rbp+4C8h]                                                ; +0xaa, 0x18001ffda\nlea     rcx, [rsp+5C0h+var_570]; void *                                ; +0xb1, 0x18001ffe1\nmov     [rbp+4C0h+ContextRecord.Rip], rax                              ; +0xb6, 0x18001ffe6\nxor     edx, edx; Val                                                  ; +0xbd, 0x18001ffed\nlea     rax, [rbp+4C8h]                                                ; +0xbf, 0x18001ffef\nmov     r8d, 98h; Size                                                 ; +0xc6, 0x18001fff6\nadd     rax, 8                                                         ; +0xcc, 0x18001fffc\nmov     [rbp+4C0h+ContextRecord.Rsp], rax                              ; +0xd0, 0x180020000\ncall    memset                                                         ; +0xd7, 0x180020007\nmov     rax, [rbp+4C8h]                                                ; +0xdc, 0x18002000c\nmov     [rsp+5C0h+var_560], rax                                        ; +0xe3, 0x180020013\nmov     [rsp+5C0h+var_570], 40000015h                                  ; +0xe8, 0x180020018\nmov     [rsp+5C0h+var_56C], 1                                          ; +0xf0, 0x180020020\ncall    cs:IsDebuggerPresent                                           ; +0xf8, 0x180020028\nmov     ebx, eax                                                       ; +0xfe, 0x18002002e\nxor     ecx, ecx; lpTopLevelExceptionFilter                            ; +0x100, 0x180020030\nlea     rax, [rsp+5C0h+var_570]                                        ; +0x102, 0x180020032\nmov     [rsp+5C0h+ExceptionInfo.ExceptionRecord], rax                  ; +0x107, 0x180020037\nlea     rax, [rbp+4C0h+ContextRecord]                                  ; +0x10c, 0x18002003c\nmov     [rsp+5C0h+ExceptionInfo.ContextRecord], rax                    ; +0x110, 0x180020040\ncall    cs:SetUnhandledExceptionFilter                                 ; +0x115, 0x180020045\nlea     rcx, [rsp+5C0h+ExceptionInfo]; ExceptionInfo                   ; +0x11b, 0x18002004b\ncall    cs:UnhandledExceptionFilter                                    ; +0x120, 0x180020050\ntest    eax, eax                                                       ; +0x126, 0x180020056\njnz     short loc_180020067                                            ; +0x128, 0x180020058\ncmp     ebx, 1                                                         ; +0x12a, 0x18002005a\njz      short loc_180020067                                            ; +0x12d, 0x18002005d\nlea     ecx, [rax+3]                                                   ; +0x12f, 0x18002005f\ncall    sub_18001FF28                                                  ; +0x132, 0x180020062\nmov     rbx, [rsp+5C0h+arg_0]                                          ; +0x137, 0x180020067\nadd     rsp, 5C0h                                                      ; +0x13f, 0x18002006f\npop     rbp                                                            ; +0x146, 0x180020076\nretn                                                                   ; +0x147, 0x180020077", "xrefs": ["__scrt_initialize_onexit_tables @ 0x18001f5bd", "dllmain_crt_process_attach @ 0x18001f9a7", "dllmain_crt_process_detach @ 0x18001fa28", "<???> @ 0x18004b2bc"], "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"}