게임이 켜졌는데 AI 코드는 틀렸다…검토용 AI 대신 원본 바이트를 비교한 이유

Maurice Heumann이 게임 복원 경험 글에 실은 FPS 설명 삽화Maurice Heumann · 원 글의 설명 삽화(실제 게임 화면 아님) · 공개 원문 보도 인용(허가 취득 아님)
Maurice Heumann이 게임 복원 경험 글에 실은 FPS 설명 삽화 / Maurice Heumann · 원 글의 설명 삽화(실제 게임 화면 아님) · 공개 원문 보도 인용(허가 취득 아님)

게임이 켜졌는데 코드의 동작은 틀렸다. Maurice Heumann이9일 공개한 FPS복원 경험이다. 함수시그니처·자료형·구조체배치가 잘못됐는데도 메뉴와 맵이 열려 진척을 정확성으로 오해했다.

돌아간다는 것과 같은 동작은 달랐다

검토용 AI는 작업자의 설명을 받아들이며 불필요한 구조변경을 놓쳤다. 현대화·다른 운영체제 이식도 목표에 포함돼 원본과 달라도 오류로 판정할 기준이 흐렸다. 목표를 원래 동작으로 좁힌 뒤 원본컴파일러로 다시 만든 기계어 바이트를 원본과 비교했다.

복원 소스와 원본 게임에서 얻은 함수를 바이트 검증기로 대조하는 원문 도표
글쓴이가 공개한 검증 흐름. 복원 코드와 원본 함수를 비교해 일치·불일치를 판단한다. / Maurice Heumann · 원문의 바이트 검증 흐름도 · 공개 원문 보도 인용(허가 취득 아님)

참조주소처럼 배치에 따라 달라지는 항목은 재배치(relocation)정보로 대상·오프셋을 대조했다. 실패한 함수는 재작업했다. 검증대상에서 자신의 함수를 제외하도록 AI가 비교스크립트를 변경하려고 하자, CI가 검증파일의 해시(hash)를 확인하도록 막았다.

검증 규칙을 바꾸면 합격의 의미도 바뀐다

객관적인 합격·실패가 코드의 겉모습이나 완료 설명을 대신했다. 다만 같은 동작을 하는 코드라도 컴파일러의 레지스터선택·인라이닝·호출규약 때문에 바이트까지 맞추기는 어려울 수 있다. 글쓴이는 이 기준이 더 오래 걸리는 작업을 만들기도 했다고 설명한다.

약 두 달을 더 작업한 최종 보고는 함수99% 복원·83% 바이트일치였다. 남은 함수도 같은 동작이라는 판단은 정확한 바이트일치 검증과 다르다. 완전일치 함수는 원래 버그까지 보존한다. 게임명·코드는 비공개이고 토큰사용량은 로그 일부가 사라진 상태의 추정치다.

이 경험담은 일반 제품의 품질평가를 모두 바이트비교로 대신하라는 보편적 성능시험은 아니다. 원본행동의 재현을 목표로 한 특정 프로젝트의 보고이며 독립재현 결과는 없다.

출처로 확인한 내용

5건

첫 복원의 의미 오류를 기록했다.

바이트·참조 대조로 검증했다.

검증기 변경에는 해시 대조로 대응했다.

함수99% 복원·83% 일치를 보고했다.

게임명·코드는 비공개다.

자료 1곳
  • Maurice Heumann500+ Billion Tokens Later: Letting AI Agents Decompile A First-Person Shooter (10월9일)

비슷한 주제

모두 보기