3

コードを変更するclangプラグインの書き方について問題がありました。次のように、プログラムにコードを挿入したい: ここにコードを入力

//the original code
//the filename is user_code.cpp
int f1(){
    return 1;
}
int f2(){
    return 2;
}
int f3(){
    return 3;
}
int main(){
   for(int i=0;i<1000;i++)f1();
   for(int i=0;i<10000;i++)f2();
   for(int i=0;i<100000;i++)f3();
   return 0;
}
//the injected code
int function_counter[3];
int f1(){
    function_counter[0]++;
    return 1;
}
int f2(){
    function_counter[1]++;
    return 2;
}
int f3(){
    function_counter[2]++;
    return 3;
}
int main(){
   for(int i=0;i<1000;i++)f1();
   for(int i=0;i<10000;i++)f2();
   for(int i=0;i<100000;i++)f3();
   return 0;
}

今、私はこのコードを AST に解析することでこれを行うことができます。それをトラバースし、ReWriter クラスを使用してコードを変更し、最後に変更されたコードを新しいファイルに書き直します。しかし、これはユーザーには透過的ではありません。clang を書きたいですプラグイン、ユーザーはコマンドを入力するだけです:

 clang -load myplugin.so -plugin myplugin user_code.cpp -o user_code.o

コードは最初に透過的に注入でき、次に通常のようにコンパイルできます。何ができますか?何か提案はありますか?

4

0 に答える 0