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