我的目标是使用不同语言(主要是C,C++,Obj-C和Haskell)的源代码,并告诉他们各种统计数据.(例如,变量,函数,内存分配,复杂性等)
LLVM似乎是一个完美的工具,因为我可以为这些语言生成bitcode,并且使用LLVM的可定制传递,我几乎可以做任何事情.对于C系列它工作正常,以C程序(test.c)为例:
#include <stdio.h>
int main( )
{
int num1, num2, sum;
printf("Enter two integers: ");
scanf("%d %d", &num1, &num2);
sum = num1 + num2;
printf("Sum: %d",sum);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后我跑:
clang -emit-llvm test.c -c -o test.bc
opt -load [MY AWESOME PASS] [ARGS]
Run Code Online (Sandbox Code Playgroud)
瞧,我几乎有我需要的一切:
1 instcount - Number of Add insts
4 instcount - Number of Alloca insts
3 instcount - Number of Call insts
3 instcount - Number of Load insts
1 instcount - Number of Ret …Run Code Online (Sandbox Code Playgroud)