红联Linux门户
Linux帮助

S2E的安装ubuntu12.04 64bit

发布时间:2015-12-13 15:55:03来源:linux网站作者:lfdanding

官网:http://s2e.epfl.ch/


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 
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这个参数,千万不要弄错了。