Site web
中文
Notdec est
Mots-clés: inverse llvm, llvm c backend / llvm-cbe.
Basé sur Ubuntu 22.04
apt sudo apt install wabt python-is-python3 clang-14 cmake zlib1g-dev g++ ninja-build
wasi-sdk vers /opt wget https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz -P /tmp
sudo tar xf /tmp/wasi-sdk-20.0-linux.tar.gz -C /opt
scripts/build-debug-llvm.sh pour télécharger et construire LLVM. Vous pouvez rencontrer des erreurs sur aucune mémoire pendant la liaison, il suffit de réduire le nombre parallèle à 1.SOUFFLE_DOMAIN_64BIT=ON文档站
:
:
Llvm ir 基础: 只要达到能手写 只要达到能手写 llvm ir 的程度就行。即主要理解各种语言特性对应的是什么样的 llvm ir 代码。同时理解带 alloca 的半 ssa 形式 , 即 alloca 里的变量是非 ssa , 外面的是 ssa。
SSA 与编译优化基础
关于 SSA 的实验
:
反编译
现有的反编译器和资料
为什么要使用 llvm ir?
优先实现 Wasm 的反编译。

图片来自 Affectation unique statique pour la décompilation
反编译中的关键算法: Récupération de type (通过指令约束推导类型) Analyse structurelle (恢复控制流)
由于基于 llvm ir , 因此语言采用 c ++。
开发环境 : VScode + cmake 。将 wabt , llvm 等作为 cmake 的外部依赖。
2023 年 9月 7 日注: : 由于对 llvm 的调试需求越来越多 , 项目转为使用本地源码编译的 llvm (RelwithDebinfo 或 Build de débogage) , 且编译得到的二进制文件过大 , 因此不再推荐使用 DevContainer。
VScode DevContainer 。出于性能考虑 , 在 Clone 时可以直接 Clone 到 WSL 的 Ext4 文件系统里。
Remote-Containers: Rebuild and Reopen in container .如果出现了无法使用 Windows 侧的 SSH-Agent 提供的 Key SSH 的 Forward 功能 : https://stackoverflow.com/questions/72293035/error-communication-with-agent-failed-when-ssh-auth-sock-isset-but-sh-agent
直接使用自带的 C / C ++ 调试 , 不知道为什么会非常慢 , GDB 执行 Backtrace 要卡 3 秒 , 各种 Étape 命令要卡 5-6 秒。因此安装使用 VScode 的 CodellDB 插件。
代码补全使用 Clangd 插件。根据提示禁用 Intellisense , 然后根据插件提示确认下载 Clangd。
反编译器自身: 能够对 能够对 能够对 能够对 内存 内存 中的变量也构建 ssa 进行优化。
最终的结果能够很好地重编译。
反编译器实现过程尽量记录完善的文档 , 未来考虑整理扩写为系列教程。
将 Wasm Lift 到 llvm ir
设计一个映射 , 将 Lift 之后的 ir 反向转回 wasm