基于Clang的函数调用分析

基于Clang的函数调用分析,clang,transformation,Clang,Transformation,我正在使用clang进行某种源代码到源代码的转换。我想做以下工作: 我在C语言中有一些函数类,它们是va_arg函数,例如printf()。源文件中可能有许多对printf()的调用。我想解析源代码并找到所有这些对printf()的调用。此外,我想找到传递给printf()的参数类型。所以,如果我有 int a, b, c; printf("%d%d%d", a, b, c); 我想知道对printf的特定调用是printf(char*,int,int,int)类型。我并不特别关心资格赛 有人

我正在使用clang进行某种源代码到源代码的转换。我想做以下工作:

我在C语言中有一些函数类,它们是
va_arg
函数,例如
printf()
。源文件中可能有许多对
printf()
的调用。我想解析源代码并找到所有这些对
printf()
的调用。此外,我想找到传递给
printf()
的参数类型。所以,如果我有

int a, b, c;
printf("%d%d%d", a, b, c);
我想知道对
printf
的特定调用是
printf(char*,int,int,int)
类型。我并不特别关心资格赛


有人能告诉我,我该怎么做?任何类似的例子都是受欢迎的。如果你能告诉我我应该看哪些课程,并简单地告诉我应该遵循的流程,我将非常感激

你应该写一封信。首先要看的是代码,它是一个非常简单的ASTConsumer


查找对printf的所有调用的一种方法是通过查找节点。这些节点有getNumArgs()和getArg(n),可以让您检查参数。您可以对这些表达式调用expr->getType()来获取它们的类型。

您应该编写一个ASTConsumer。首先要看的是代码,它是一个非常简单的ASTConsumer

查找对printf的所有调用的一种方法是通过查找节点。这些节点有getNumArgs()和getArg(n),可以让您检查参数。您可以对这些表达式调用expr->getType()来获取它们的类型