S2E的安装 ubuntu12.04 64bit

首先参考官网 http://s2e.epfl.ch/

然后主要参考了这篇博客  http://blog.csdn.net/jayxujia123/article/details/34126151

还参考了这篇博客 http://blog.csdn.net/u012905667/article/details/39558899

1、Required Packages

sudo apt-get install build-essential
sudo apt-get install subversion
sudo apt-get install git
sudo apt-get install gettext
sudo apt-get install liblua5.1-0-dev
sudo apt-get install libsdl1.2-dev
sudo apt-get install libsigc++-2.0-dev
sudo apt-get install binutils-dev
sudo apt-get install python-docutils
sudo apt-get install python-pygments
sudo apt-get install nasm
sudo apt-get install libiberty-dev    //这个安装不上去,没有关系
sudo apt-get install libc6-dev-i386
sudo apt-get build-dep llvm-3.3
<pre>sudo apt-get build-dep qemu
 
 
 2、Checking out S2E 
 

mkdir S2EDIR
cd S2EDIR
git clone https://github.com/dslab-epfl/s2e.git
3、Building S2E

mkdir build
cd build
make -f ../s2e/Makefile
4、Preparing a Linux VM Image

./qemu-release/qemu-img create -f raw s2e_disk.raw 2G
wget http://cdimage.debian.org/debian-cd/7.7.0/i386/iso-cd/debian-7.7.0-i386-CD-1.iso
./qemu-release/qemu-system-i386 s2e_disk.raw -m 1024 -cdrom debian-7.7.0-i386-CD-1.iso
//客户端的源过时了,需要添加至少一个常规的仓库
deb http://ftp.debian.org/debian/ wheezy main contrib non-free
//然后执行
apt-get update
apt-get install build-essential
5、然后配置config.lua文件,为了以后可以使用s2eget工具
s2e = {
        kleeArgs = {
        -- Run each state for at least 30 second before
        -- switching to the other:
        "--use-batching-search=true", "--batch-time=30.0"
        }
}


plugins = {
        -- Enable a plugin that handles S2E custom opcode
        "BaseInstructions" ,
        "HostFiles"
}

pluginsConfig = {}

pluginsConfig.HostFiles = {
  baseDirs = {"/home/lifeng/software/S2EDIR/doc"}
}

6、然后将s2e文件夹tar压缩上传到客户机,通过scp命令

7、然后在客户机中编译s2eget命令


8.可以扩展为.s2e格式了

cp s2e_disk.raw s2e_disk.raw.s2e
s2e的镜像格式和raw完全一样的,所以只需要单纯的copy就好了,后面所需要使用的镜像都是.raw.s2e

下面解释一下S2E虚拟机镜像格式

已经存在的镜像格式不适合多路径执行,因为它们常常在读操作中改变内部的记录结构。而且,它们可能把这些改变写到磁盘文件中,引起虚拟机镜像破坏。QCOW2是一个例子

S2E镜像格式,不像其他格式,是多路径的,当在S2E模式下,写对每个状态是局部的不会约束其他状态。而且,写不会将状态传播到镜像中,这个允许在多个S2E实例中共享一块磁盘镜像或者快照

S2E镜像格式在分开的文件中存储快照,以快照的名字为后缀。比如,如果镜像叫做“my_image.raw.s2e”,快照名字是ready(ctrl+alt+2,savevm ready ,quit),则在当前目录下会生成my_image.raw.s2e.ready的镜像


虚拟机镜像的指导

当运行在S2E模式,镜像必须是S2E格式.S2E不支持其他镜像格式

VM镜像的相关需求和建议

在vanilla QEMU中安装OS。这是最快的方式。一般来说,所有的安装和组建工作都应该在vanilla QEMU中进行。

始终备份一个最新的OS。建议在进行每一次分析工作时都从一个新的OS备份开始。例如,如果使用一个镜像已经用来测试过设备驱动了,不要再用它来分析电子表格组件。一个镜像只进行一次分析。这样会更加利于管理而且更容易产生结果

当S2E格式的镜像建立起来即将用于在符号执行模式下运行时,生成一个快照,可以在S2E-enabled QEMU中运行它。这个步骤不是必须的,但是这会大大地缩短启动时间,因为在S2E中启动一个镜像会花费很长时间。

建议在guest OS中使用128MiB的RAM(或者更少)。S2E并不会被内存的大小所限制,而你的物理机器会

禁用桌面主题和一切图形化效果影响以减少资源消耗。

禁用屏幕保护程序。

禁用一切不必要的程序(如文件共享,打印,无线网络配置,防火墙等)来减少内存消耗并提高速度。

避免使用QEMU virtio网络接口。在这个版本的 QEMU中,它被打包到了S2E,可以有随机崩溃。


s2e中有2中模式,DBT模式和S2E模式

在DBT(dynamic binary translation)模式下,qemu是正常使用的,可以上网,主要是对你的客户机系统进行初始化,配置。

<pre name="code" class="cpp">./qemu-release/i386-softmmu/qemu-system-i386 s2e_disk.raw
./qemu-release/i386-softmmu/qemu-system-i386 s2e_disk.raw.s2e //在s2e里的所有操作都不将保存
 配置完后,为了保存快照可以在s2e模式下使用,重新启动,这也是S2E **disabled**模式,这种模式可以通过在guest端使用Ctrl + Alt + 2 然后输入'savevm 1'来保存快照(快照名为1) 
 

./qemu-release/i386-softmmu/qemu-system-i386 s2e_disk.raw.s2e -net none
ctrl + alt + 2
savevm 1 
quit

 
 
 然后在S2E模式下启动虚拟机(是 S2E ENABLED模式,这种模式不能保存快照。) 
 

./qemu-release/i386-s2e-softmmu/qemu-system-i386 s2e_disk.raw.s2e -net none -loadvm 1 -s2econfig-file config.lua -s2e-verbose
以上两种模式的区别在于一个是使用i386-softmmu下的文件,一个是使用i386-s2e-softmmu下的文件,注意一点, i386-softmmu下的qemu-system-i386这个没有-s2e-config-file-s2e-verbose这个参数,千万不要弄错了。

你可能感兴趣的:(S2E的安装 ubuntu12.04 64bit)