Resident Evil 4 trên GameCube được dịch ngược hoàn chỉnh sang C/C++, khớp từng byte

Công nghệ20 tháng 9, 2026·4 phút đọc

Một dự án mã nguồn mở đã dịch ngược thành công tựa game Resident Evil 4 bản GameCube (build debug G4BE08, nguyên mẫu ngày 25/11/2004) sang C/C++. Kết quả tái tạo chính xác từng byte so với bản gốc main.dol và toàn bộ 114 tệp REL, mở ra tiềm năng nghiên cứu và bảo tồn game cổ điển.

Resident Evil 4 trên GameCube được dịch ngược hoàn chỉnh sang C/C++, khớp từng byte

Cộng đồng bảo tồn game vừa chứng kiến một cột mốc đáng chú ý: dự án re4 trên GitHub đã hoàn tất việc dịch ngược (decompile) tựa Resident Evil 4 phiên bản Nintendo GameCube sang ngôn ngữ C/C++, đạt mức khớp từng byte với bản gốc.

Điểm đáng kinh ngạc là dự án không chỉ khớp về mặt logic, mà còn tái tạo chính xác từng byte của main.dol và cả 114 tệp REL overlay — điều hiếm khi đạt được ngay cả với các dự án dịch ngược lâu năm.

Bản build nào được dịch ngược?

Dự án nhắm vào build debug G4BE08 — bản nguyên mẫu (prototype) ghi ngày 25/11/2004, bao gồm cả hai đĩa. Đây là điểm mấu chốt, bởi bản debug có các tệp Bio4.sym ghi lại tên gọi của mọi hàm, giúp quá trình đặt tên và tái tạo cấu trúc trở nên khả thi.

Khi build lại kho mã nguồn, kết quả tái tạo chính xác main.dol và mọi tệp REL — được kiểm tra tự động qua build.sha1 ở mỗi lần build.

Quy mô đồ sộ

Không phải một công việc nhỏ. Các con số biết nói:

  • 1083 đối tượng (object) đều khớp từng byte, trong đó 675 nằm trong DOL và 408 trải trên 114 tệp REL
  • 15641 hàm được tái tạo
  • Khoảng 555.000 dòng mã C/C++ trong thư mục src/, cùng 33.000 dòng header — và không có tệp assembly nào cho phần thân game
  • Tên hàm giữ nguyên bản gốc của Capcom (đã bị C++-mangle), nên phần game viết bằng C++ còn SDK, CRI và newlib viết bằng C

Ba bộ công cụ biên dịch từ ba nhà cung cấp khác nhau

Một trong những thách thức lớn nhất là game gốc được xây dựng bằng ba bộ biên dịch khác nhau:

  • SN Systems ProDG 3.9.3 — GCC 2.95.3 "SN BUILD v1.79", dùng cho phần lớn mã game, được build trực tiếp từ nguồn GPL mà SN phát hành
  • Metrowerks CodeWarrior 2.4.7 — dùng cho các thư viện middleware CRI
  • Metrowerks CodeWarrior GC/1.2.5n — dùng cho Nintendo SDK, lấy nguồn từ dolsdk2004

Để tái tạo chính xác từng byte, nhóm phát triển buộc phải tái dựng đúng các phiên bản trình biên dịch cũ này — công việc đòi hỏi cả kiến thức sâu về lịch sử công cụ phát triển game.

"Khớp" nghĩa là gì trong dự án này?

Đây là khái niệm then chốt. Mỗi đơn vị mã nguồn phải biên dịch ra đúng chuỗi byte gốc bằng chính trình biên dịch gốc. Khi trình biên dịch yêu cầu một cách viết mã cụ thể mới tái tạo được lựa chọn thanh ghi hay thứ tự lệnh, tác giả đánh dấu bằng bình luận // COMPILER-DIFF.

Đặc biệt, dự án nhấn mạnh rằng không có lệnh assembly nào thừa được phát sinh: công cụ asmcheck.py kiểm tra và chỉ tìm thấy các lệnh đến từ chính template phần cứng cần thiết.

Phần assembly còn lại đều là những đoạn mà chính tác giả gốc cũng phải viết bằng assembly, vì trình biên dịch thời đó không có cách diễn đạt khác — ví dụ các kernel paired-single, thiết lập GQR trong scheduler, hay các intrinsic GX của SDK.

Pháp lý và tính hợp pháp

Dự án nêu rõ: kho mã không chứa tài nguyên game hay mã/dữ liệu sao chép từ đĩa. Để build, người dùng cần có bản image đĩa debug của riêng mình.

Phần mã game và SDK được tái tạo thuộc sở hữu trí tuệ của Capcom, Nintendo và CRI Middleware, được công bố chỉ nhằm mục đích nghiên cứu và bảo tồn. Các script build, công cụ và tài liệu do dự án viết ra được phát hành theo giấy phép CC0.

Ý nghĩa với cộng đồng

Với người hâm mộ game và giới nghiên cứu kỹ thuật, đây là một thành tựu có giá trị lớn. Dịch ngược khớp byte không chỉ giúp bảo tồn tựa game nguyên vẹn về mặt kỹ thuật, mà còn mở đường cho việc port sang nền tảng mới, nghiên cứu kiến trúc engine, hay thậm chí chỉnh sửa và mở rộng game — tất cả dựa trên mã C/C++ dễ đọc thay vì mã máy.

Dự án còn cung cấp tài liệu chi tiết như docs/overview.md (hướng dẫn đọc kiến trúc engine theo từng hệ thống con) và docs/matching.md (cách đạt được độ khớp byte), biến nó thành nguồn học liệu quý cho những ai muốn tìm hiểu cách game thời kỳ GameCube được lập trình.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗