웹 사이트
中文
NOTDEC입니다
키워드 : 리버스 LLVM, LLVM C 백엔드 / LLVM-CBE.
우분투 기반 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 를 실행하십시오. 연결 중에 메모리가없는 오류가 발생할 수 있으며 병렬 숫자를 1로 줄입니다.SOUFFLE_DOMAIN_64BIT=ON文档站
本项目旨在 :
学习阶段 :
llvm ir ir : 只要达到能手写 llvm ir 的程度就行。即主要理解各种语言特性对应的是什么样的 llvm ir 代码。同时理解带 alloca 的半 ssa 形式 形式, 即 alloca 里的变量是非 ssa, 外面的是 ssa。
SSA 与编译优化基础
SSA a
其他不错的资料 :
反编译
现有的反编译器和资料
为什么要使用 llvm ir?
优先实现 wasm 的反编译。

decompilation에 대한 정적 단일 할당
反编译中的关键算法 : 유형 회복 ■ (通过指令约束推导类型)) 구조 분석 (恢复控制流)
由于基于 llvm ir, 因此语言采用 c ++。
: Vscode + cmake 。将 wabt, llvm 等作为 cmake 的外部依赖。
2023 月 9年 7 日注 : 由于对 llvm 的调试需求越来越多 的调试需求越来越多, 项目转为使用本地源码编译的 llvm − (relwithdebinfo 或 Debug 빌드 찾고 且编译得到的二进制文件过大, 因此不再推荐使用 devcontainer。
vscode devcontainer 。出于性能考虑 。出于性能考虑 。出于性能考虑, 在 클론 时可以直接 클론 到 wsl 的 ext4 文件系统里。
Remote-Containers: Rebuild and Reopen in container .如果出现了无法使用 Windows sh SSH-Agent 提供的 SSH 키 的 전방 功能 : https://stackoverflow.com/questions/72293035/error-communication-with-agent-failed--ssh-ssh-sock-is-set-ssh-agent
C/C/C ++ 调试 调试 调试, 不知道为什么会非常慢 不知道为什么会非常慢, gdb 执行 백 트레이스 要卡 3 秒 秒, 各种 단계 命令要卡 5-6 秒。因此安装使用 vscode 的 codelldb 插件。
代码补全使用 clangd d Intellisense, 然后根据插件提示确认下载 clangd。
反编译器自身 : 能够对 能够对“内存”中的变量也构建 SSA 进行优化。
最终的结果能够很好地重编译。
反编译器实现过程尽量记录完善的文档, 未来考虑整理扩写为系列教程。
将 wasm 리프트 lift llvm ir
设计一个映射, 将 리프트 之后的 ir 反向转回 wasm