zsim的安装与运行

zsim的安装

原项目地址https://github.com/s5z/zsim
这个地址对应的zsim在运行时可能会有链接等意想不到的错误,所以如果出错,可以选择使用下面的地址
https://github.com/stanford-mast/zsim

1. 操作系统选择

这个地方非常重要,我最开始用的22.04,但是发现出错了,排查了半天错误,发现是操作系统的问题(zsim是2013年的工作了,太老了),因此需要把操作系统换成14.04
我在我的原系统内装了一个docker,并下载了一个ubuntu-14.04.6-server-amd64.iso的镜像文件(对应的链接),这个镜像文件里没有任何的软件包,需要自己后面下载,在docker里安装自己镜像的操作系统并生成容器这个步骤,可以直接gpt,但是在生成时有一个问题,在运行
./build/opt/zsim tests/simple.cfg
时会报错说

[H] Deadlock detection ON
personality() call failed: Operation not permitted
[H] Panic on build/opt/zsim_harness.cpp:293: Could not change personality to disable address space randomization!
personality() call failed: Operation not permitted
[H] Panic on build/opt/zsim_harness.cpp:293: Could not change personality to disable address space randomization!

这里就需要在创建容器时先设置权限

docker run --privileged -it your_container_image

your_container_image是你的镜像名称
然后进入容器后,运行语句

sudo bash -c 'echo 0 > /proc/sys/kernel/randomize_va_space'

2.依赖包安装

根据项目要求,需要安装gcc >=4.6, pin, scons, libconfig, libhdf5, libelfg0这几个软件包
在安装这几个包之前,需要配好必要的软件包

  1. 更改/etc/apt/sources.list,否则每次更新都会链接出错,我使用的是阿里源(把原来的内容都删掉,然后换成这个,如果将来想用ubuntu的源,直接从网上搜就行,再换回来)
deb https://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

## Not recommended
# deb https://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse

更改之后需要运行sudo apt update来更新软件包列表
2. 更新源
如果直接sudo apt-get install ***会出现错误(我的是这样的),所以需要运行命令sudo apt-get -f install,用来修复依赖关系,然后再运行命令sudo apt-get install build-essential,从而安装好必要的软件包,其中就包括gcc4.8和g++4.8
3. 安装项目依赖
a) 安装pin,这里要安装2.14版本的pin(pin-2.14-71313-gcc.4.4.7-linux.tar),我试了一下3.24、3.13和3.30,都会出现链接的问题
在容器内解压后,需要加一个名为PINPATH的环境变量,即运行命令行

	export PINPATH=your_pin_path

your_pin_path是进入你的pin文件夹后的path,可以通过运行命令pwd
获得。直接解压就行,不需要编译和运行
b) 安装scons,直接运行

	sudo apt-get install scons

c) 安装libconfig,我这里安装的是1.7.2版本(下载链接
安装完成后,需要按顺序运行下面代码

	./configure
	make
	make check
	make install

然后设置环境变量

	export LIBCONFIGPATH=your_libconfig_path

注意:当使用上面方法安装完,再运行zsim时如果报错,可以直接用sudo apt-get install 安装,此时就需要将这个环境变量删除

	sudo apt-get install libconfig-dev libconfig++-dev

d) 安装libhdf5(下载链接
解压完成后就行,不需要编译和运行,同样需要设置环境变量

	export HDF5PATH=your_hdf5_path

e) 安装libelfg0,直接sudo apt-get install libelfg0

3. 运行zsim

进入zsim文件夹,然后运行scons -j16
然后再运行./build/opt/zsim tests/simple.cfg
当运行第二条命令时,可能会报错

root@cf70582d16a9:/home/zsim# ./build/opt/zsim tests/simple.cfg
[H] Starting zsim, built Tue Jul 23 05:52:57 UTC 2024 (rev master:113:2aea90e:clean)
[H] Creating global segment, 1024 MBs
[H] Global segment shmid = 0
[H] Deadlock detection ON
E: 5.15 is not a supported linux release
[H] Child 36350 done
E: 5.15 is not a supported linux release
[H] Child 36351 done
[H] All children done, exiting

因此需要对zsim/src里的pin_cmd.cpp进行改动,具体改动步骤看这里
即,在第52行加上

   args.push_back("-injection");
   args.push_back("child");

然后可能还会报错

A: Source/pin/injector_nonmac/auxvector.cpp: CopyAux: 291: unexpected AUX VEC type 51

################################################################################
## STACK TRACE
################################################################################
addr2line -C -f -e "/home/env_lab/pin-2.14-71313-gcc.4.4.7-linux/intel64/bin/pinbin" 0x5555555c07f9 0x5555555c15ce 0x5555555c18a0 0x5555557e3b3c 0x5555557e92ff 0x5555557eae2d 0x5555557dafe1 0x5555557dfb2d 0x5555557d022e 0x5555557da230 0x7ffff700ef45 0x5555555b517a
??
??:0
??
??:0
??:0

需要再在相同的位置处加

args.push_back("-ifeellucky");

然后再运行,成功!

注意:当在运行scons -j16后,出现有关libconfig的报错时,可以通过删除zsim文件夹下的.sconsign.dblite来解决,直接运行命令rm .sconsign.dblite
然后再重新运行scons -j16

总结

  1. 看别人的解释和解决方法一定要看仔细
  2. 用好chatgpt,有好多次解决方法,从网上搜搜不到,或者很复杂,但是问chatgpt就能很快解决,不得不说,chatgpt的功力还是很高的
  • 17
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值