原来这就是我想要做的事:如何将参数传递给我在LLVM传递中使用CallInst :: Create(...)调用的外部函数?
if(isa<CallInst>(&(*BI)))
{
ArrayRef <Value *> arguments('c');
StringRef fname = cast<CallInst>(&(*BI))->getCalledFunction()->getName();
errs()<<fname + " was called\n";
//CallInst *CI = dyn_cast<CallInst>(BI);
if(fname=="pthread_mutex_lock"){
Instruction *newInst = CallInst::Create(hook, arguments, "");
BB->getInstList().insert(BI, newInst);
}
其中“钩子”是功能。我得到的错误是:
没有匹配的构造函数的 “数组引用” 数组引用参数(“C”)的初始化;
当我改变ArrayRef <Value *> arguments('c')
到ArrayRef <char> arguments('c')
误差变:
没有匹配函数调用 '创建' 指令* newinst中= CallInst ::创建(钩,argume ... ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /.../llvm/IR/Instructions.h:1187:20: 备注: 候选函数不可行:没有已知的从'ArrayRef'转换为 'ArrayRef'用于第二个参数static CallInst * Create(Value * Func, ^ /.../llvm/llvm-3.4/include/llvm/IR/Instructions.h:1200:20: 注: 候选函数不可行:没有已知的从'ArrayRef'转换为 'const llvm :: Twine'静态CallInst * Create(Value * F,const Twine & NameStr =“”, ^ /.../llvm/llvm-3.4/include/llvm/IR/Instructions.h:1204:20: 注意: 候选函数不可行:没有已知的从'ArrayRef'转换为 'const llvm :: Twine'的第二个参数静态CallInst *创建(Value * F,常量Twine & NameStr, ^ /.../llvm/ llvm-3.4/include/llvm/IR/Instructions.h:1194:20: 注意: 候选函数不可行:需要4个参数,但3人提供的静态CallInst *创建(价值* Func键, ^
我也没有认识到参数传递给外部函数我在LLVM通过打电话,因为我是新来这个东西。帮助将不胜感激!
谢谢您的回复,我现在可以传递一个字符。但如何处理字符数组(我想传递一个字符串)? –
尝试llvm :: ConstantDataArray :: get(context,string)请参阅http://llvm.org/docs/doxygen/html/classllvm_1_1ConstantDataArray.html –