环境:windows,visual studio 2019,cmake
目的:c++代码混淆
一 IDE安装clang平台工具集
1:打开visual studio Installer
2.点击已安装下的 修改 ->单个组件,搜索框中输入"clang",勾选,然后点击安装。(我这里的clang编译器版本是12.0.0)
二 OLLVM的下载与编译
下载地址:ollvm下载链接(注意我这里下载的版本是12.x,因为上面安装的clang版本是12.0.0))
下载解压后假设项目目录为:“D:\work_project\obfuscator-llvm-12.x”
假设你已经安装了cmake,且安装路径为“D:\CMake”
1.在项目根目录中打开cmd,输入以下3个命令:
mkdir build
cd build
D:\CMake\bin\cmake -G “Visual Studio 16 2019” -DLLVM_ENABLE_PROJECTS=“clang” -DCMAKE_BUILD_TYPE=Release -DLLVM_INCLUDE_TESTS=OFF -DLLVM_ENABLE_NEW_PASS_MANAGER=OFF …\llvm
构建完成后会在build中生成vs解决方案,然后用vs 2019打开,右键"ALL_BUILD"点击生成Release版本,如下图所示:
生成过程会很慢,生成完成后如果0失败,则表示生成成功了。
然后右键“INSTALL”,点击生成,如果出现如下错误,则请重新用管理员权限打开visual studio,重新右键"INSTALL"生成
生成成功的话将ollvm环境安装在“C:\Program Files (x86)\LLVM”目录,当然没有添加到环境变量,你可以手动添加到系统的PATH环境变量.
三 visual studio 测试和使用
让Visual Studio使用我们自己编译的llvm(带混淆功能的)编译项目。
1.用vs新建控制台程序,比如llvmTest,右键项目属性,平台工具集选择llvm
2.右键项目属性->c/c+±>command Line的“其它选项”中输入以下混淆指令:
3.在项目llvmTest根目录中新建文件Directory.build.props,用记事本打开,输入以下内容
<Project>
<PropertyGroup>
<LLVMInstallDir>C:\Program Files (x86)\LLVM</LLVMInstallDir>
</PropertyGroup>
</Project>
“C:\Program Files (x86)\LLVM”为上面INSTALL后的安装目录
然后右键llvmTest项目,点击生成,结果提示如下错误:
我看了下我的llvm如下,我的是12.0.1,这个在下载ollvm的时候版本只有12.x,我也没得选。于是我投机取巧把12.0.1重命名为12.0.0。
再点击生成,又提示:
靠,难道就是因为clang版本不对吗,于是我用everything搜lld-link.exe,发现我们在第一步给vs安装llvm后就有这个文件了
于是我把“D:\Microsoft Visual Studio2019\Community\VC\Tools\Llvm\x64\bin”目录下的lld-link.exe拷贝到"C:\Program Files (x86)\LLVM\bin"
,然后右键生成,居然成功了,靠!
虽然成功了,总感觉不踏实,因为版本没对应上,12.0.1和12.0.0。