import struct import sys from pathlib import Path STREAM_NAMES = { 0: "Unused", 3: "ThreadList", 4: "ModuleList", 5: "MemoryList", 6: "Exception", 7: "SystemInfo", 9: "Memory64List", 12: "HandleData", 14: "UnloadedModule", 15: "MiscInfo", 16: "MemoryInfoList", 17: "ThreadInfoList", } EXCEPTION_NAMES = { 0x80000003: "STATUS_BREAKPOINT", 0xC0000005: "STATUS_ACCESS_VIOLATION", 0xC000001D: "STATUS_ILLEGAL_INSTRUCTION", 0xC0000094: "STATUS_INTEGER_DIVIDE_BY_ZERO", 0xC00000FD: "STATUS_STACK_OVERFLOW", 0xE06D7363: "MSVC_CPP_EXCEPTION", } def read_cstring(f, rva: int) -> str: pos = f.tell() f.seek(rva) data = bytearray() while True: b = f.read(1) if not b or b == b"\x00": break data.extend(b) f.seek(pos) return data.decode("utf-8", "replace") def parse(path: Path) -> None: with path.open("rb") as f: sig, ver, num_streams, dir_rva, checksum, ts, flags = struct.unpack( "= 2: op = {0: "read", 1: "write", 8: "DEP"}.get(params[0], str(params[0])) print(f"Access: {op} at 0x{params[1]:016X}") mod_streams = [s for s in streams if s[0] == 4] if mod_streams: _, _, mod_rva = mod_streams[0] f.seek(mod_rva) num_modules = struct.unpack("= 1232: f.seek(tctx_rva) ctx = f.read(tctx_size) # CONTEXT_AMD64 offsets rip = struct.unpack(" 1 else r"C:\Program Files (x86)\Steam\steamapps\common\MaSzyna\crash_2026-06-11_02-31-05.dmp" ) parse(dump)