Warcraft II Remastered 1.0.2.2818 — Repeated Access Violation / Invalid Pointer Read
Warcraft II Remastered repeatedly crashes to desktop during normal gameplay without displaying an error.
I performed debugging with WinDbg and was able to capture the underlying exception.
Environment
Game: Warcraft II Remastered
Game version: 1.0.2.2818
Executable: Warcraft II.exe
Executable path: D:\Blizzard\Warcraft II Remastered\x86\Warcraft II.exe
Architecture: x86 / 32-bit executable
Launch method: Battle.net
Battle.net Scan and Repair was performed successfully before reproducing the crash.
Symptoms
The game abruptly exits during gameplay.
There is:
-
No visible crash/error dialog.
-
No corresponding Application Error event in Windows Event Viewer.
-
No failure recorded in Windows Reliability Monitor.
-
No WER LocalDump generated despite LocalDumps being explicitly enabled for
Warcraft II.exe. -
Battle.net simply detects that the game process is no longer running.
Monitoring the Battle.net-launched process showed a final process exit code of:
-1073740791 (0xC0000409)
I subsequently attached WinDbg to the Battle.net-launched Warcraft II process and reproduced the failure under the debugger.
Actual exception captured by WinDbg
0xC0000005 — Access violation
WinDbg analysis:
Failure.Bucket: INVALID_POINTER_READ_c0000005_Warcraft_II.exe!Unknown
Failure.ProblemClass.Primary: INVALID_POINTER_READ
Failure.Exception.IP.Module: Warcraft_II
Failure.Exception.IP.Offset: 0x218c60
IMAGE_VERSION: 1.0.2.2818
Exception record:
ExceptionAddress: Warcraft_II+0x218c60
ExceptionCode: c0000005 (Access violation)
Attempt to read from address 00000032
The faulting instruction is:
Warcraft_II+0x218c60
cvtsi2ss xmm1,dword ptr [edx+8]
At the time of the exception:
EDX = 0000002A
Therefore the instruction attempts to dereference:
[0x2A + 0x08] = 0x00000032
which produces the access violation.
Relevant register state
EAX = 1c300870
EBX = 0000002a
ECX = 0000003a
EDX = 0000002a
ESI = 00000022
EDI = 1c147c78
EIP = 011e8c60
EBP = 004ff208
Relevant code immediately preceding fault
Warcraft_II+0x218c31: mov ecx,dword ptr [ebp-4]
Warcraft_II+0x218c34: mov edx,dword ptr [ecx+44h]
Warcraft_II+0x218c37: lea eax,[edx*4+1]
Warcraft_II+0x218c3e: push eax
Warcraft_II+0x218c3f: mov ecx,dword ptr [ebp-0Ch]
Warcraft_II+0x218c42: call Warcraft_II+0x219360
Warcraft_II+0x218c47: mov ecx,dword ptr [ebp-4]
Warcraft_II+0x218c4a: add ecx,10h
Warcraft_II+0x218c4d: mov dword ptr [ebp-10h],ecx
Warcraft_II+0x218c50: cvtsi2ss xmm0,dword ptr [ebp+8]
Warcraft_II+0x218c55: addss xmm0,dword ptr [Warcraft_II+0x44249c]
Warcraft_II+0x218c5d: mov edx,dword ptr [ebp-4]
Warcraft_II+0x218c60: cvtsi2ss xmm1,dword ptr [edx+8] <-- ACCESS VIOLATION
The value stored at [ebp-4] appears to be invalid by the time execution reaches Warcraft_II+0x218c5d.
Of particular interest is the call immediately preceding the eventual invalid dereference:
Warcraft_II+0x219360
The same [ebp-4] value is dereferenced earlier at Warcraft_II+0x218c34. If its value had already been 0x2A at that point, the process would have faulted there. This suggests the value may be changing/corrupted during the intervening execution, potentially during or as a consequence of the call to Warcraft_II+0x219360.
Stack
The captured stack contains Warcraft II executable frames until normal Windows thread initialization:
Warcraft_II+0x218c60
Warcraft_II+0x10ddd3
Warcraft_II+0x115378
Warcraft_II+0x1f4903
Warcraft_II+0x1a1648
Warcraft_II+0x214838
Warcraft_II+0x198338
Warcraft_II+0x198648
Warcraft_II+0xa4dc9
Warcraft_II+0xc5502
Warcraft_II+0xc5b60
Warcraft_II+0xd1132
Warcraft_II+0xd118e
Warcraft_II+0xd1689
Warcraft_II+0x41e343
Warcraft_II+0x41e1c8
Warcraft_II+0x3ea02c
KERNEL32!BaseThreadInitThunk
ntdll!__RtlUserThreadStart
No third-party module appears in the captured call stack at the point of failure.
Request
Please investigate the invalid pointer dereference at Warcraft_II+0x218c60 in build 1.0.2.2818, particularly the validity/lifetime of the object referenced through [ebp-4] and execution surrounding Warcraft_II+0x219360.
The crash is reproducible during gameplay and makes the game unreliable to play.
In less technical terms: please fix this thing. I just want to play Warcraft II.