How to call function using dynamically resolved address

62 Views Asked by At

Please see the code below and the comments. I am guessing I need to find a way to set the arguments and function type for the f_resolved_addr (CallInst). Assuming I am right, how to do it correctly?

(or if not how I can call a function based on it's function address that is dynamically provided by a different external function?)

std::vector<Value *> args2;
args2.push_back(object);
args2.push_back(function_name);


// calling f_ResolveFunction(object, function_name) will return dynamic function address of function_name
// i want to later call this function using the dynamic function address
CallInst *f_resolved_addr = Builder->CreateCall( f_ResolveFunction, args2, "resolve_call");

// f_resolved_addr (now "contains" the resolved function address?)
// target function (resolved function) takes one 32-bit integer as argument
// and returns one 32-bit integer

std::vector<Value *> args;
args.push_back(ConstantInt::get(ctx, APInt(32, 0x123)));
Value *call_ret = Builder.CreateCall(f_resolved_addr, args, "call");

// however CreateCall causes assert condition here
// Assertion failed: (Args.size() == FTy->getNumParams() || (FTy->isVarArg() && Args.size() > FTy->getNumParams())) && "Calling a function with bad signature!",

Builder.CreateCall(f_resolved_addr(CallInst) ... is causing assert condition.

0

There are 0 best solutions below