banner
PPKun

Puniverse

bilibili

Hikariに基づくLLVM Pass

プロジェクトアドレス: 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

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。