2010-11-29 28 views
2

私は、ある種のソースからソースへの変換を行うためにclangを使用しています。私は次のことをしたいと思っています:Clangを使用した関数呼び出し解析

私はva_argの関数であるいくつかのクラスの関数、例えばprintf()を持っています。ソースファイルにはprintf()への多数の呼び出しがあるかもしれません。ソースコードを解析し、これらの呼び出しをすべてprintf()に検索したいと思います。さらに、私はprintf()に渡される引数の型を探したい。私は

int a, b, c; 
printf("%d%d%d", a, b, c); 

のようなものを持っているのであれば、私はprintfへの特定のコールタイプprintf(char*, int, int, int)であることを把握できるようにしたいです。私は修飾語を特に気にしません。

誰かが私がclangでこれをやっていかなければならないか教えてもらえますか?これに似た何かをする例は歓迎されるでしょう。私が見なければならないすべての授業と、それに従わなければならない流れを簡単に教えてくれたら、とても感謝しています。

答えて

0

ASTConsumerを記述する必要があります。最初に調べるのは、非常に単純なASTConsumerであるexamples/PrintFunctionNamesのコードです。

printfへのすべての呼び出しを見つけるには、​​3210を経由して、CallExprのノードを探します。これらのノードには、引数を調べるためのgetNumArgs()およびgetArg(n)があります。これらの式でexpr-> getType()を呼び出して型を取得できます。

関連する問題