A decompilation of Roblox as it shipped in December 2007. The aim is to rebuild the original binaries instruction for instruction, and to end up with a tree worth building on afterwards.
Conventions and tooling follow the LEGO Island decompilation.
Note: The code here reproduces the original release and does not try to improve on it. 32-bit Windows only.
Still early. WebService.dll contains 12,633 functions. We are decompiling RBXGS first since the client contains no debug symbols.
Visual C++ 8.0 SP1 compiled the original and is the only toolchain that reproduces its output, so contributions are measured against it.
- Visual C++ 8.0 SP1. MSVC800-SP1 is a portable copy that requires no installation.
- CMake, either standalone or from the "Desktop development with C++" workload of a current Visual Studio.
Open a command prompt and run Common7\Tools\vsvars32.bat from the toolchain to set the environment. VC\bin\vcvars32.bat will not do, as it defers to %VS80COMNTOOLS% and expects a registered installation.
Then configure and build:
cmake -B build -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=RelWithDebInfo
cmake --build build
RelWithDebInfo keeps the debug symbols that further decompilation work depends on, and NMake Makefiles is the generator that copes with a toolchain of this age. The result is build\WebService.dll.
To compare a build against the original, install our fork of reccmp:
pip install -r tools/requirements.txt
Point it at your copy of the original through reccmp-user.yml in the project root:
targets:
WEBSERVICE:
path: path/to/WebService.dllThen:
reccmp-reccmp --target WEBSERVICE -S WEBSERVICEPROGRESS.SVG
WebService/- The RBXGS-specific translation unitscommon/- Engine static libraries, one directory per.libthe original link consumed3rdparty/- Vendored dependenciesutil/- Headers supporting the decompilation itselfcmake/- CMake modulestools/- Python tooling and its requirementsreccmp/- Data sources for reccmpassets/- Icons for the progress report
| Binary | Size | SHA256 |
|---|---|---|
| WebService.dll | 3,461,120 bytes | 5e9c6b82605fc8429c5fc5f682f2d7f98b55b73d993dfba58437365754410e2f |
Version 0.3.676.0, dated December 20, 2007.
Contributions are welcome. The conventions in short:
- Annotate decompiled code with reccmp markers (
FUNCTION:,STUB:,GLOBAL:) - Order functions within a translation unit by ascending address
- Place each file at the path
WebService.pdbrecords for it - Follow the clang-format configuration
- Take names from the PDB where it has them, and use NCC placeholders (
FUN_XXXXXXXX,g_unk0xXXXXXXXX) only where it does not - Keep pull requests small and focused
You can view CONTRIBUTING.md for more details!