使用
For English version, refer to Usage.
完成本项目的安装后, 你就可以反编译世界中的 Udon 程序了.
本项目不提供这方面的指引. 你应当有一个 .vrcw.vrcw 格式的文件.
使用 安装一节下载的 UdonProgramDumperUdonProgramDumper 程序提取 .vrcw.vrcw 中的程序文件, 具体而言:
-
使用命令行
UdonProgramDumper dump <world.vrcw>UdonProgramDumper dump <world.vrcw>你应该得到类似这样的输出
$ UdonProgramDumper dump example.vrcw[example.vrcw] dumped 8 program(s), 8 public var file(s) to /path/to/example-dumped$ UdonProgramDumper dump example.vrcw[example.vrcw] dumped 8 program(s), 8 public var file(s) to /path/to/example-dumped - 直接将
.vrcw.vrcw文件拖放到UdonProgramDumperUdonProgramDumper程序上. 这实际上等价于前一种方法.
然后可以在 .vrcw.vrcw 文件相同目录下找到所生成的 example-dumpedexample-dumped 文件夹, 其中包含:
programs/programs/: 提取出的.hex.hex程序文件vars/vars/: 提取出的.b64.b64public var 文件program-var-map.jsonprogram-var-map.json: program 与使用它的 GameObject/public var 文件之间的映射
运行
udon-decompiler dc example-dumped/programs --info UdonModuleInfo.json
udon-decompiler dc example-dumped/programs --info UdonModuleInfo.json
此处需要填写 example-dumped/programsexample-dumped/programs 文件夹和 UdonModuleInfo.jsonUdonModuleInfo.json 文件的实际路径.
控制台应当显示日志如
2026-03-18T03:15:38.832775Z INFO udon_decompiler: logging initialized level=info2026-03-18T03:15:38.832843Z INFO udon_decompiler: start command mode=Dc input=example-dumped/programs output=None template=None2026-03-18T03:15:38.837946Z INFO udon_decompiler: processing directory mode=Dc input_dir=example-dumped/programs output=None template=None2026-03-18T03:15:38.842021Z INFO udon_decompiler: processing "example-dumped/programs/27d9de9b1e2d2424cadf167f75a47d24.hex"2026-03-18T03:15:38.845832Z INFO udon_decompiler::decompiler::context: class name inferred: Sonic853.Udon.Keypad.UdonVRCheckerObjects2026-03-18T03:15:38.845873Z INFO udon_decompiler::decompiler::context: decompile context loaded bytecode_len=468 instruction_count=60 entry_points=1 symbols=15 heap_entries=232026-03-18T03:15:38.846975Z INFO udon_decompiler::decompiler::variable: 23 variables identified from heap2026-03-18T03:15:39.018584Z INFO udon_decompiler::decompiler::module_info: successfully loaded module info2026-03-18T03:15:39.019550Z INFO udon_decompiler::decompiler::basic_block: 7 basic blocks identified2026-03-18T03:15:39.019791Z INFO udon_decompiler::decompiler::cfg: 1 functions discovered with their cfgs built2026-03-18T03:15:39.019884Z INFO udon_decompiler::decompiler::ir::builder: 1 IrFunctions built2026-03-18T03:15:39.020321Z INFO udon_decompiler::decompiler::transform::pipeline: IR transformed.2026-03-18T03:15:39.020411Z INFO udon_decompiler::decompiler::codegen: c# code for UdonVRCheckerObjects generated!2026-03-18T03:15:39.073924Z INFO udon_decompiler: example-dumped/programs/27d9de9b1e2d2424cadf167f75a47d24.hex -> example-dumped/programs-decompiled/Sonic853_Udon_Keypad_UdonVRCheckerObjects.cs...2026-03-18T03:15:39.710051Z INFO udon_decompiler: done!
2026-03-18T03:15:38.832775Z INFO udon_decompiler: logging initialized level=info2026-03-18T03:15:38.832843Z INFO udon_decompiler: start command mode=Dc input=example-dumped/programs output=None template=None2026-03-18T03:15:38.837946Z INFO udon_decompiler: processing directory mode=Dc input_dir=example-dumped/programs output=None template=None2026-03-18T03:15:38.842021Z INFO udon_decompiler: processing "example-dumped/programs/27d9de9b1e2d2424cadf167f75a47d24.hex"2026-03-18T03:15:38.845832Z INFO udon_decompiler::decompiler::context: class name inferred: Sonic853.Udon.Keypad.UdonVRCheckerObjects2026-03-18T03:15:38.845873Z INFO udon_decompiler::decompiler::context: decompile context loaded bytecode_len=468 instruction_count=60 entry_points=1 symbols=15 heap_entries=232026-03-18T03:15:38.846975Z INFO udon_decompiler::decompiler::variable: 23 variables identified from heap2026-03-18T03:15:39.018584Z INFO udon_decompiler::decompiler::module_info: successfully loaded module info2026-03-18T03:15:39.019550Z INFO udon_decompiler::decompiler::basic_block: 7 basic blocks identified2026-03-18T03:15:39.019791Z INFO udon_decompiler::decompiler::cfg: 1 functions discovered with their cfgs built2026-03-18T03:15:39.019884Z INFO udon_decompiler::decompiler::ir::builder: 1 IrFunctions built2026-03-18T03:15:39.020321Z INFO udon_decompiler::decompiler::transform::pipeline: IR transformed.2026-03-18T03:15:39.020411Z INFO udon_decompiler::decompiler::codegen: c# code for UdonVRCheckerObjects generated!2026-03-18T03:15:39.073924Z INFO udon_decompiler: example-dumped/programs/27d9de9b1e2d2424cadf167f75a47d24.hex -> example-dumped/programs-decompiled/Sonic853_Udon_Keypad_UdonVRCheckerObjects.cs...2026-03-18T03:15:39.710051Z INFO udon_decompiler: done!
然后可以在 example-dumped/programs-decompiledexample-dumped/programs-decompiled 目录中找到所有反编译结果, 也即 .cs.cs 格式的伪代码.