这个寒假准备学习LLVM,作为奆型C++项目,还是很有学习价值的,且在二进制逆向中经常被使用到,因此非常有学习的必要,这里我准备在 Windows 上编译 LLVM。

此时 LLVM 的大版本号在 17。

多的概念就不介绍了,因为我自己也还没有完全理解qwq

编译

首先,作为学习,我们必须要生成一个对自己友好的编译环境,方便自己调试,我们不仅仅是去使用它,而是要去理解+分析,方便我们的二次开发和插件的编写。

首先项目地址:

1
https://github.com/llvm/llvm-project

先使用 git 把项目拉下来,然后会得到一个很大的源文件。而其中的 llvm 子目录才是整个项目源码的核心,这便作为 llvm 的根目录(并不是拉下来的llvm-project)。

这是一个 cmake 项目,这里我并不是很确定我本地有什么环境,但是我已有的环境确实是项目拉下来能直接编译,我列举几个大概可能会用到的东西:

  • cmake,本项目就是用cmake去编译的,所以这个环境一定要先配置好。
  • Visual Studio,对于 Windows 比较友好的编译器,应该也需要安装 windows 的 sdk。

最后应该就可以启动编译命令去生成 vs 工程文件了。

这里我踩了一个坑:就是因为前几次编译命令打错了,导致文件可能部分损坏(已经排除 CmakeCache.txt的原因),所以我是删了重拉项目之后可以直接编译的。

首先在 llvm 目录下创建两个目录,一个是 WindowsProject,这个作为我们 LLVM VS工程目录,一个是 Windows,这里用于放置编译的产物。

进入 WindowsProject 文件夹,打开命令行,输入如下命令:

1
cmake -DLLVM_ENABLE_PROJECTS="clang;lld" -DLLVM_TARGETS_TO_BUILD="X86" -DLLVM_ENABLE_PLUGINS=On -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_FLAGS_DEBUG="/Ox" -DCMAKE_CXX_FLAGS_DEBUG="/Ox" -DLLVM_INCLUDE_TESTS=On -DLLVM_ENABLE_RTTI=ON -DCMAKE_INSTALL_PREFIX="../Windows" ../

测试集大家看需要开启,不需要的话加 DLLVM_INCLUDE_TESTS 置为 Off。

大概等待 2min 左右,就可以看到文件生成进了 WindowsProject 目录。

这里我开启了测试集,然后用VS2022打开了项目。

然后直接生成解决方案即可,这里需要量配置而行。

下面给出我电脑的配置:

最后我是在经过了一个半小时左右的时间完成了编译。

有一个项目失败是因为我开了测试集,不过不影响。

至此,LLVM算是编译完成了,之后打算先学习一下控制流平坦化的混淆。