私は何時間も探していましたが、私を助けることができるものは何も見つかりません. FunctionPass を含むプロジェクトに取り組んでいます。runOnFunction(Function &f) メソッドを実装しましたが、正常に動作しています。基本的に、次のことが必要です。
1) ストア命令の検出
2) ストア命令のメモリ アドレスを整数に変換します。
3) ビットごとの AND 演算 (0000FFFF) を使用して整数を変更します。
4) 整数をポインタに戻す
これまでのところ、次のものがあります。
virtual bool runOnFunction(Function &F) {
for (Function::iterator bb = F.begin(), bbe = F.end(); bb != bbe; ++bb) {
BasicBlock& b = *bb;
for (BasicBlock::iterator i = b.begin(), ie = b.end(); i != ie; ++i) {
if(StoreInst *si = dyn_cast<StoreInst>(&*i)) {
PtrToIntInst* ptrToInt = new PtrToIntInst(si->getPointerOperand(), IntegerType::get(si->getContext(), 32), "", si);
}
}
}
return true;
}
私は一生、実際に命令を挿入する方法を理解することはできません。また、AND 命令を作成する方法を見つけることさえできません。誰かが私を正しい方向に向けることができれば、それは素晴らしいことです.
前もって感謝します。