windows环境下编译OLLVM 13.x
- VisualStudio配置
- 下载OLLVM13.x
- ollvm的使用
网上关于windows环境编译ollvm信息比较杂乱,在此编译成功的基础上做一下总结!
VisualStudio配置
1,正常配置C++桌面环境
2,在单个组件中选择用于Windows得C++ Cmake工具
下载OLLVM13.x
链接: link.
解压后进入文件夹使用
Developer Command Prompt for VS 2022打开该路径
输入:
cmake -G "Visual Studio 17 2022" -DLLVM_ENABLE_PROJECTS="clang" -DCMAKE_BUILD_TYPE=Release -DLLVM_INCLUDE_TESTS=OFF -DLLVM_ENABLE_NEW_PASS_MANAGER=OFF ./llvm
这里解释一下参数
-G “Visual Studio 17 2022”:使用 VS 进行编译源码(或者Visual Studio 16 2019)
-DLLVM_ENABLE_PROJECTS=“clang”:启用clang,有多个选择 但我们只需要clang,官方文档有说明
-DCMAKE_BUILD_TYPE=Release:构建 release 版本,比 debug 版本编译快很多
-DLLVM_INCLUDE_TESTS=OFF:关闭 llvm 的头文件测试,也是为了加快编译速度
-DLLVM_ENABLE_NEW_PASS_MANAGER=OFF:这个非常重要,llvm-12.x 开始默认使用 newPM进行编译源码,导致 ollvm 不起作用!因此,需要加上这个参数禁用掉 newPM。(虽然可以用 -flegacy-pass-manager 让 llvm 不走 newPM 编译,但是…你不觉得在你的源码上加一串怎么长的命令很难受吗)
之后打开VISUALSTUDIO进行Debug或者Release编译,编译后即可得到clang.exe文件
VS打开后:
编译成功后:
ollvm的使用
Instructions Substitution (指令替换)
-mllvm -sub: 启用instructions substitution
-mllvm -sub_loop=3: 对每个函数混淆3次,默认1词
Control Flow Flattening (控制流平坦化)
-mllvm -fla: 启用control flow flattening
-mllvm -split: 启用block切分,提升平展程度
-mllvm -split_num=3: 对每个block混淆3次,默认1词
Bogus Control Flow (虚假控制流)
-mllvm -bcf: 启用 bogus control flow
-mllvm -bcf_loop=3: 对一个函数混淆3次,默认1次
-mllvm -bcf_prob=40: 代码块被混淆的概率是40%,默认30%
-mllvm -sobf: 字符串加密
函数注解的使用
//Functions annotations
int foo() __attribute((annotate((“sub”))));
int foo() {
return 2;
}
例如 clang -mllvm -fla demo.c -o demo.exe