宣言された関数に渡された値を取得し、それを出力する必要があるLLVMパスを記述しています。宣言された関数がLLVM IRで呼び出されていることに注意してください。ランタイム中に宣言された関数の引数値を取得する
私は、モジュールパスを書いて、プログラム内のすべての命令について反復処理を行いました。命令で呼び出された関数の引数を取得するためのスニペットは次のとおりです。
invoke void @function_name(i8* %4, i8* bitcast (i8** @_ZTIi to i8*), i8* null) #5
to label %36 unwind label %6
その後、私の上記のコード:
for (auto &B: F){
for (auto &I: B){
if (auto *InvokeI = dyn_cast <InvokeInst>(&I)) {
if (InvokeI->getCalledFunction()->getName().str() == "function_name") {
errs() << "===\n";
errs() << *(InvokeI->getOperand(0)) <<"\n";
errs() << *(InvokeI->getOperand(1)) <<"\n";
errs() << *(InvokeI->getOperand(2)) <<"\n";
}
}
}
}
機能のためにLLVM IRが呼び出さ取得ただし場合は、次のようになりますスニペット出力:
%4 = call i8* @__cxa_allocate_exception(i64 4) #2
i8* bitcast (i8** @_ZTIi to i8*)
i8* null
代わりの関数呼び出しの間に渡されている実際の値をoutputing。
私の質問は、実行時に渡される値を取得する方法です。何も返さない関数宣言に関数本体を追加する方法はありますか?
この上の任意のヘルプは高く評価され、 おかげ
これは、例外を生成するための 'C++ abi'呼び出しです。ペーストビンやそれに類似した場所でそのIRを生成する元のソースコードの最小限のスニペットを提供できますか? – compor
実際には関数名は '__cxa_throw'であり、そのIRを生成するコード行は基本的に' thow 1'だけで、それを捕まえようとしていました – Nik391
少し混乱しています。あなたがC++ [ABI](https://itanium-cxx-abi.github.io/cxx-abi/)を指し示すものを残しているからです。 – compor