如何从LLVM-IR打印printf的参数名称

时间:2017-02-03 13:53:19

标签: llvm llvm-clang

任何人都可以帮助我从 LLVM-IR 中找到printf()来电的实际参数名称。

例如:我在程序中有printf("%d,%d,x,y);语句。

我正在编写 LLVM 传递以查找实际参数名称(上例中的x和y)。

1 个答案:

答案 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
}

编辑:几个月后再看看这个,我可以告诉你,这样做的唯一方法就是让你做占位符映射。