網站
中文
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