任何人都可以帮助我从 LLVM-IR 中找到printf()
来电的实际参数名称。
例如:我在程序中有printf("%d,%d,x,y);
语句。
我正在编写 LLVM 传递以查找实际参数名称(上例中的x和y)。
答案 0 :(得分:1)
这样做的一种方法是使用CallExpr
来识别printf调用
您将使用getArgs()
而不是getArg(0)
并使用迭代器来解析参数。
const Expr* expr = CE->getArg(0); //CE is the CallExpr for printf
if (const ImplicitCaseExpr* ICE =
llvm::dyn_cast<ImplicitCastExpr>(expr)) {
const Expr* DRE_VAR = ICE->getSubExpr();
//now, cast and parse the AST
}
编辑:几个月后再看看这个,我可以告诉你,这样做的唯一方法就是让你做占位符映射。