我正在研究LLVM混淆项目.我已经写了一个llvm传递(让我们说流动扁平化传递),我使用以下命令在源(test.c)上运行它:
clang -emit-llvm test.c -c -o test.bc
opt -load ../../.. LLVMFlattening.so -fla <test.bc>/dev/null
Run Code Online (Sandbox Code Playgroud)
但我已经看到,在O-LLVM项目中,他们使用以下方法实现了相同的目标:
clang -emit-llvm test.c -c -o test.bc -mllvm -fla
Run Code Online (Sandbox Code Playgroud)
有人能告诉我这里的-mllvm是什么,以及如何将其改为简单的命令?
-mllvm手段Additional arguments to forward to LLVM's option processing.因此-mllvm -fla将传递-fla给LLVM的选项处理.
Clang和LLVM可以单独运行.如果你想让clang运行llvm,还有一些你想让我知道的选项.-mllvm是你需要的.
不可否认,LLVM没有打开所有转换过程.使用-fla,LLVM将fla通过调用函数打开通过命令行参数注册的传递RegisterPass<typename passName>.
在命令行中,opt的-load选项用于加载插件.如果要按预期使用简单命令行.您的传递需要链接到opt二进制文件.这可以通过以下两种方式完成:
CMakeLists.txt此链接中提到的添加您的唯一通道的源<LLVM root>/lib/Transform目录中.并修改<LLVM root>/lib/Transform/CMakeLists.txt,添加add_subdirectory(<pass name>)行就像其他人一样.