寻找一种轻量级的解决方案来系统地检测C函数的if条件

时间:2016-02-08 17:41:54

标签: python c instrumentation

我需要使用轻量级检测工具(比如使用一些现有的Python或C预处理器框架)在C函数的if条件中系统地插入语句:

例如,让foo成为C函数:

int foo(int x){
   if (x>3) 
        return x;
}

我需要将其转换为

int foo(int x){
   if (x>3){ 
        print ("%d", x); 
        return x;
  }
}

我尝试过使用LLVM,但它没有更好地与代码的其他部分集成。在这里,我更喜欢Python / C预处理器框架解决方案。谢谢你的想法。

1 个答案:

答案 0 :(得分:1)

您可以考虑使用GCC MELTGCC Python Plugin来自定义GCC编译器来转换其Gimple表示。这将是一个完整的解决方案,但我不确定它是否符合"轻量级" (因为你需要了解GCC内部的细节),但是Clang / LLVM方法也不是。您可能需要超过一周的工作时间(特别是要了解GCC或Clang / LLVM的内部)

顺便说一下,你的问题不像你认为的那么容易,因为

int foobar(int x) { return (x>3)?(x*6):(x*x); } 

包含条件。此外,您的原始功能完全等同于

int foo(int x){
    while (x>3) // this while is done 0 or 1 time
      return x;
}

很容易找到很多其他表达方式。

因此纯粹的句法方法永远不会完全奏效。因此,你不能希望得到某些东西" light"。

(我认为C代码检测从不轻量级问题)