-
GTA San Andreas의 20년 된 버그가 Windows 11 24H2에서 드러남
- GTA San Andreas에서 Skimmer 비행기가 Windows 11 24H2에서 사라지는 버그가 보고됨
- SilentPatch를 사용해도 문제 해결이 되지 않음
- Windows 11 23H2에서는 문제가 발생하지 않음
- Windows 11 24H2로 업데이트한 사용자들 모두 이 버그를 경험함
버그 조사
무엇이 잘못되었는가?
- SilentPatch 설치 시 게임이 멈추는 문제 발생
-
CPlane::PreRender에서 작은 루프에 갇히는 현상 발견
- 비행기의 블레이드 속도가 비정상적으로 높게 설정됨
- 블레이드 속도는 비행기의 고도에 비례하여 계산됨
왜 그리고 어떻게?
- Skimmer의 vehicles.ide 정의에서 필요한 매개변수가 누락됨
- Vice City에서는 Skimmer가 보트로 정의되어 있었음
- San Andreas에서 비행기로 변경되었으나 필요한 매개변수가 추가되지 않음
진정한 근본 원인
- Windows 11 24H2에서 스택 사용 방식이 변경되어 문제가 발생함
-
LeaveCriticalSection이 스택 공간을 더 많이 사용하게 됨
- 이전에는 fgets와 LeaveCriticalSection이 스택 공간을 덮지 않았으나, 이제는 덮게 됨
이 문제가 이제서야 발생한 이유
- Windows 11 24H2의 변경 사항으로 인해 스택 공간이 변경됨
- 게임이 초기화되지 않은 지역 변수를 사용하여 발생한 문제
- 다른 플랫폼에서는 이미 수정된 문제였음
게임에서 이 문제를 해결하고 싶다면?
- 다음 SilentPatch 핫픽스에 코드 수정이 포함될 예정
-
vehicles.ide 파일을 수동으로 수정하여 문제 해결 가능
마지막 말
- 이 버그는 특정 OS 릴리스와 직접적으로 연결된다는 점에서 흥미로움
- 스택 레이아웃의 변경이 호환성에 영향을 미칠 수 있음을 보여줌
- 입력 데이터를 검증하고 컴파일 경고를 무시하지 말아야 함