本次编译安装使用的操作系统是64位Ubuntu12.04。(注意:S2E只能在64位机上运行)
首先在S2E的官网(https://s2e.epfl.ch/projects/s2e)上下载S2E的源代码,本次编译安装使用的是s2e-source-1.2-27.04.2012.tar.bz2。将文件解压,得到s2e-public文件夹。在s2e-public/docs目录下找到BuildingS2E.html文件。之后按照网页上的安装指南一步一步安装就OK。在安装过程中不得不提的是如下几个注意点:
1.在RequiredPackages中的$ sudo apt-get build-dep llvm-2.7指令需要修改为$ sudo apt-get build-dep llvm-3.0。因为在Ubuntu12.04中不支持llvm-2.7的build-dep(你会发现在下载源里有llvm-2.6、llvm-2.8就是没有llvm-2.7),强烈不推荐使用llvm-2.8以下的版本,因为之后的编译过程中会出现无数个“llvm error 'ptrdiff_t' does not name a type”的问题。Further more,在这个版本的s2e中使用的llvm也是3.0的。
2.关于Checkingout S2E部分。如果你身在大陆地区,那么还是用上文所说的在官网的文件目录下下载源代码吧。不用费力尝试gitclone了,即使是手动从github中下载最新的s2e源代码都几乎是不可能的。或者还有个办法就是请在港澳台或是国外的朋友帮你下载(前提是你能找到)。
3.在BuildingS2E部分,正如网页上所说,那个Building the S2E Framework Manually链接实在是太老了。还是老老实实使用s2e-public目录下的Makefile文件来进行编译安装吧,简单而且方便。如果想了解具体的编译过程,可以通过Makefile文件来了解。需要注意的是,在编译前把s2e-public文件夹重命名为s2e,因为在Makefile文件中的编译命令中默认的是s2e路径。
在S2E的编译过程中会遇到下面的一个问题,在s2e-public/qemu/audio目录下的sdlaudio.c文件、s2e-public/qemu/ui目录下的sdl.c文件和s2e-public/qemu/ui目录下的sdl_zoom.h文件中都会出现#include<SDL.h>语句头文件找不到的错误。解决的方法就是将这条语句改为#include <SDL/SDL.h>。
之后要做的就是耐心等待S2E完成编译和安装,这个过程需要花费一些时间。