GTA San Andreas의 20년 된 버그, Windows 11 24H2에서 발견

1 week ago 19

  • 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 릴리스와 직접적으로 연결된다는 점에서 흥미로움
  • 스택 레이아웃의 변경이 호환성에 영향을 미칠 수 있음을 보여줌
  • 입력 데이터를 검증하고 컴파일 경고를 무시하지 말아야 함

Read Entire Article