网站
中文
Notdec是
关键字:反向LLVM,LLVM C后端 / LLVM-CBE。
基于Ubuntu 22.04
apt sudo apt install wabt python-is-python3 clang-14 cmake zlib1g-dev g++ ninja-build
wasi-sdk到/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以下载和构建LLVM。在链接过程中,您可能会遇到关于没有内存的错误,只需将并行数量降低到1即可。SOUFFLE_DOMAIN_64BIT=ON文档站
本项目旨在:
学习阶段:
llvm ir基础:llvm ir的程度就行。即主要理解各种语言特性对应的是什么样的llvm ir saloca ssa形式,即ssa,ssa,外面的是ssa。
SSA与编译优化基础
SSA的实验
其他不错的资料:
反编译
现有的反编译器和资料
llvm ir?
优先实现wasm的反编译。

图片来自静态单分配的分配
反编译中的关键算法:键入恢复(通过指令约束推导类型)结构分析(恢复控制流)
由于基于llvm ir,因此语言采用c ++。
开发环境:vscode + cmake。将wabt,llvm等作为cmake的外部依赖。
2023年9月7日:由于对llvm的调试需求越来越多,llvm(relwithdebinfo(debug build)(build),且编译得到的二进制文件过大,因此不再推荐使用
vscode devcontainer。出于性能考虑,在克隆时可以直接克隆到wsl的ext4文件系统里。
Remote-Containers: Rebuild and Reopen in container 。Windows侧的ssh-agent提供的ssh键的:https://stackoverflow.com/questions/72293035/72293035/error-communication-with-with-agent-fail-fail-fail-when-ssh-auth-auth-auth-auth-shet-sock-sock-isock-is-iset-set-set-set-ssh-ssh-ssh-ssh-gasent
直接使用自带的c/c ++调试,不知道为什么会非常慢,gdb执行backtrace要卡3秒,各种步骤命令要卡5-6秒。因此安装使用vscode的codelldb插件。
代码补全使用clangd插件。根据提示禁用Intellisense,然后根据插件提示确认下载clangd。
反编译器自身:能够对“内存”中的变量也构建ssa进行优化。
最终的结果能够很好地重编译。
反编译器实现过程尽量记录完善的文档,未来考虑整理扩写为系列教程。,未来考虑整理扩写为系列教程。
将wasm升降机到llvm ir
设计一个映射,将提升之后的ir反向转回wasm