【发布时间】:2021-08-07 13:08:55
【问题描述】:
我想插入下面的函数:
void foo(uintptr_t addr) {}
函数类型声明:
std::vector<llvm::Type*> params = {Type::getInt64Ty(Context)};
FunctionType* funcTy = FunctionType::get(Type::getVoidTy(Context), params, false);
调用插入:
llvm::IRBuilder<> builder(I);
builder.SetInsertPoint(bb, ++builder.GetInsertPoint());
// uintptr_t addr = 123213
ArrayRef< Value* > args(ConstantInt::get(Type::getInt64Ty(llvmContext), addr, false));
builder.CreateCall(F,args);
得到:调用签名错误的函数!"'失败。
请帮助正确的方法
【问题讨论】:
-
你添加的参数是一个int,不是指向int的指针。
-
谢谢,但您能否更具体地说明我需要更改的确切代码?
-
是的,一周后我回到键盘前。
-
嗯,我回来了,但仔细检查后,我认为我不能给你确切的代码。 Youc 调用
ConstantInt::get()会从一个常量整数中为您提供一个常量整数。这意味着你有一个常量整数,但你想要的甚至不是一个整数,它是一个指向整数的指针。您是否尝试通过引用传递整数?我不知道你想做什么。
标签: c++ llvm llvm-ir llvm-c++-api