My game kept crashing for an unexplained reason that was never documented in the reliability report, which means it was an intentional crash, so I looked into it.
The game has a lot of balancing/sanity/OOB/etc checks it runs for various (stupid) things. If one of them fails, it tries to signal to the debugger about it. This is usually done in the smoke testing phase of a product to have it present the error in the debug log, so that the QA tester can sift through the log and determine if something needs to be changed. It seems, however, that they expected the debugger to just capture the exception and then print the message and continue execution. However, I assume they were supposed to be converted to console prints for the production build, but some were left in the production build, because Bethesda just fucking SUCKS ASS at coding. To disable this, simply run this script:
Code: Select all
// Game Executable : Starfield.exe
// Author : gir489
// Executable Version: 1.7.23.0
// MD5 Signature : 3403DA43E33E9773D9D4B8C8DE8F43D9
// EXE Compile Date : August 21, 2023 04:58 PM
// Script Date : September 12, 2023 08:59 PM
[ENABLE]
aobscanmodule(aob_example,Starfield.exe,FF 15 9D 2C 65 03)
registersymbol(aob_example)
aob_example:
nop 6
return_example:
[DISABLE]
aob_example:
db FF 15 9D 2C 65 03
unregistersymbol(aob_example)
dealloc(newmem_example)
{
// ORIGINAL CODE - INJECTION POINT: Starfield.exe.text+8553DD
Starfield.exe.text+8553A5: CC - int 3
Starfield.exe.text+8553A6: CC - int 3
Starfield.exe.text+8553A7: CC - int 3
Starfield.exe.text+8553A8: CC - int 3
Starfield.exe.text+8553A9: CC - int 3
Starfield.exe.text+8553AA: CC - int 3
Starfield.exe.text+8553AB: CC - int 3
Starfield.exe.text+8553AC: CC - int 3
Starfield.exe.text+8553AD: CC - int 3
Starfield.exe.text+8553AE: CC - int 3
Starfield.exe.text+8553AF: CC - int 3
Starfield.exe.text+8553B0: 48 83 EC 48 - sub rsp,48
Starfield.exe.text+8553B4: C7 44 24 20 00 10 00 00 - mov [rsp+20],00001000
Starfield.exe.text+8553BC: 48 89 54 24 28 - mov [rsp+28],rdx
Starfield.exe.text+8553C1: 89 4C 24 30 - mov [rsp+30],ecx
Starfield.exe.text+8553C5: C7 44 24 34 00 00 00 00 - mov [rsp+34],00000000
Starfield.exe.text+8553CD: 4C 8D 4C 24 20 - lea r9,[rsp+20]
Starfield.exe.text+8553D2: 33 D2 - xor edx,edx
Starfield.exe.text+8553D4: 44 8D 42 03 - lea r8d,[rdx+03]
Starfield.exe.text+8553D8: B9 88 13 6D 40 - mov ecx,406D1388
// ---------- INJECTING HERE ----------
Starfield.exe.text+8553DD: FF 15 9D 2C 65 03 - call qword ptr [Starfield.exe.rdata+1080] //KERNELBASE.RaiseException
// ---------- DONE INJECTING ----------
Starfield.exe.text+8553E3: EB 00 - jmp Starfield.exe.text+8553E5
Starfield.exe.text+8553E5: 48 83 C4 48 - add rsp,48
Starfield.exe.text+8553E9: C3 - ret
Starfield.exe.text+8553EA: CC - int 3
Starfield.exe.text+8553EB: CC - int 3
Starfield.exe.text+8553EC: CC - int 3
Starfield.exe.text+8553ED: CC - int 3
Starfield.exe.text+8553EE: CC - int 3
Starfield.exe.text+8553EF: CC - int 3
Starfield.exe.text+8553F0: 48 89 5C 24 08 - mov [rsp+08],rbx
Starfield.exe.text+8553F5: 57 - push rdi
Starfield.exe.text+8553F6: 48 83 EC 20 - sub rsp,20
Starfield.exe.text+8553FA: 48 8B D9 - mov rbx,rcx
Starfield.exe.text+8553FD: E8 0E B4 0B 00 - call Starfield.exe.text+910810
Starfield.exe.text+855402: FF 15 08 1F 65 03 - call qword ptr [Starfield.exe.rdata+310]
Starfield.exe.text+855408: 89 05 D2 6E BB 04 - mov [Starfield.exe+540D2E0],eax
Starfield.exe.text+85540E: E8 0D 84 03 00 - call Starfield.exe.text+88D820
Starfield.exe.text+855413: B8 02 01 00 00 - mov eax,00000102
Starfield.exe.text+855418: BF FF FF FF FF - mov edi,FFFFFFFF
Starfield.exe.text+85541D: 0F 1F 00 - nop dword ptr [rax]
}
"The least bugs ever." ~
[Link].