プロジェクトアドレス: Hikari-LLVM19
enable-strcry は rust で問題が発生する可能性があります。他は自分でテストしてください
警告: mac arm64 でのみコンパイルに成功し、完全なテストは行っていません
混乱プラグインは Hikari-LLVM15 から抽出されました。作成者は 61bcdefg です。
初めてこのようなものを作成しました。0xlane さんのコードに感謝し、多くの落とし穴を避けることができました。ここに彼のプロジェクトアドレスを貼っておきます ollvm-rust
コンパイル#
環境#
Macos 15.2
LLVM 19.1.7
cmake -G "Ninja" -S . -B ./build \
-DCMAKE_CXX_STANDARD=17 \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=ON \
-DLT_LLVM_INSTALL_DIR=/opt/homebrew/opt/llvm@19
LT_LLVM_INSTALL_DIR を自分のものに変更する必要があります。CMake にハードコーディングされているので、置き換える必要があります
rust 動的ロード#
llvm pass プラグインを動的にロードするには、nightly チャンネルに切り替える必要があります。
rustup toolchain install nightly
サンプルプロジェクトを生成し、-Zllvm-plugins
パラメータを使用して pass プラグインをロードし、-Cpasses
パラメータを使用して混乱スイッチを指定します:
cargo new helloworld --bin
cd helloworld
cargo +nightly rustc --release -- -Zllvm-plugins="path/to/libHikari.dylib" -Cpasses="hikari(enable-fco,enable-strcry)..."
opt 動的ロード#
# clangを使用してソースコードをコンパイルし、IRを生成します
clang -emit-llvm -c input.c -o input.bc
# optツールを使用してカスタムPassをロードして実行します
opt -load-pass-plugin="path/to/libHikari.dylib" --passes="hikari(enable-fco,enable-strcry)..." input.bc -o output.bc
# IRファイルをオブジェクトファイルにコンパイルします
llc -filetype=obj output.bc -o output.o
# オブジェクトファイルをリンクして実行可能ファイルを生成します
clang output.o -o output
感謝#
Hikari-LLVM15 作成者 61bcdefg
ollvm-rust 作成者 0xlane