对于遗传编程的研究,我想在llvm的基础上实现一个进化系统并应用代码突变(可能在IR级别).
我发现了llvm-mutate,这是非常有用的执行点突变.据我所知,指令得到计数/编号,然后可以删除编号的指令.
但是,作为代码中的可用语句之一,似乎可以引入新指令.然而,真正的突变将允许插入任何允许的IR指令,而不管它是否在要变异的代码中使用.此外,应该可以插入链接库的库函数调用(不在当前代码中使用,但可能可用,因为lib已在clang中链接).
我是否在llvm-mutate中忽略了这一点,或者到目前为止真的不可能?
是否有任何项目试图/已经为llvm实施(ed)此类突变?
llvm有许多代码分析工具,应该允许实现上述方法.llvm很大,所以我有点迷失方向.任何提示哪些工具可能有用(例如获取可用库函数列表等)?
谢谢Alex
我几周前在debian wheezy上编译并安装了LLVM(configure&make),现在尝试从源代码编译llvm-mutate传递.AFAICC,llvm-mutate遵循源代码构建指令的cmake .
在尝试构建llvm-mutate时
mkdir build
cd build
cmake -DCMAKE_MODULE_PATH=/usr/local/share/llvm/cmake ../
Run Code Online (Sandbox Code Playgroud)
我明白了:
- 忽略Mutate - 此平台不支持可加载模块.
嗯?opt和可加载的传递(在llvm_trunk/build/Debug + Asserts/lib/xxx.so中)存在且工作(已使用configure&make编译,而不是cmake).
所以这个问题似乎与cmake有关?其他人遇到了这样的问题,不管怎么用win使用cygwin:这里
任何的想法?谢谢Alex