前端arm-后端x86 trace提取-snipersim

前端arm-后端x86 trace提取-snipersim

仿真路线:前端arm提取trace,后端x86

前端:arm-ubuntu,由板子提供,部署Snipersim和DynamoRIO,用于trace产生

后端:x86-pc,部署Snipersim和Capstone,用于分析

本文记录根据snipersim/README.arm64 at main · snipersim/snipersim (github.***)实验过程-前端trace提取

使用的板子是树莓派5-arrch64

1.Snipersim
1.1 snipersim部署

按照以下步骤进行

#snipersim源码
git clone https://github.***/snipersim/snipersim.git 

#将snipersim源码路径记为SIM_ROOT_ARM,但个人直接笨方法,路径全部列出
#只编译libsift.a成功即可
cd $(SIM_ROOT_ARM)/sift

#snipersim的编译需要在python2的环境中,下面会进行python2环境搭建

snipersim的环境需要在python2的环境中进行搭建,下面进行python2环境搭建介绍

1.2 python版本管理工具-miniforge

最近发现一个个人认为比较好用的环境管理工具--miniforge

他和conda的用法是一样的,但是安装更为方便:

#以下是一些常用用法
#查看conda版本
conda -V
#新建conda环境
conda create --name 环境名 python=3.7
#查看已有环境
conda env list 
#激活环境
conda activate 环境名
#退出当前环境,回到上一环境
conda deactivate 
#删除环境
conda remove -n 环境名 --all

miniforge下载网址:conda-forge/miniforge: A conda-forge distribution. (github.***)​​​​​​

在网页的readme中找到相应架构所对应的压缩包,我选择的是第二个aarch64结构的:

#在arm板子上,以下链接是当时最新链接
wget https://github.***/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-aarch64.sh

# cd 进入刚才miniforge下载目录
bash Miniforge3-Linux-aarch64.sh -b

# 安装结束后,输入以下指令进行 conda初始化
~/miniforge3/bin/conda init

#记得最后要重启终端

#创建python2的环境,一路yes
conda create --name py2 python=2.7

#激活python2的环境
conda activate py2
1.3 snipersim编译

在snipersim的makefile.config文件中修改如下内容,使之能成功识别我们的板子即可

修改完成之后在snipersim/sift下执行make

#进入py2的环境下
make

这里不需要全部编译完成,只需要libsift.a编译完成即可;因为后续部分功能arm并不支持,因此报错。

2 DynamoRIO

按照如下步骤进行

tip:此时需要切换回python3的环境,可以另外创建(或deactivate 返回base ,一般为python3)

#dynamorio源码下载,记dynamorio根目录为DR_ROOT
git clone --recurse-submodules -j4 https://github.***/DynamoRIO/dynamorio.git

#创建连接
ln -s $(SIM_ROOT_ARM)/frontend/dr-frontend $(DR_ROOT)/clients/dr-frontend

#编译
cd dynamorio 
mkdir build && cd build

cmake ..

#可能无法成功,按照之后提示修改
make -j4

make不一定会成功,需要进行如下修改:

2.1 SNIPER_HOME赋值

文件位于(DR_ROOT)\clients\dr-frontend\CMakeList.txt:

在文件42行加入SNIPER_HOME的复制路径,为snipersim的根目录

2.2 未定义droption_t报错

在文件$(DR_ROOT)/clients/dr-frontend/dr_fe__options.h$(DR_ROOT)/clients/dr-frontend/dr_fe_options.t***加入以下内容:

2.3 dyn_addresses数组越界

在文件$(SIM_ROOT_ARM)/frontend/frontend_defs.h中进行修改,猜测,能跑就行

完成以上修改,在进行make

make

#创建连接
ln -s $(DR_ROOT)/build $(SIM_ROOT_ARM)/dynamorio
3 TRACE生成

 随便写个代码:test.c

#include <stdio.h>
int main(){
	printf("hello, world");
	return 0;
}

 g*** -o test test.c

        不知为何readme所给指令是“-c $(SIM_ROOT_ARM)/dynamorio/clients/lib64/debug/libdr-frontend.so”,而$(SIM_ROOT_ARM)/dynamorio/clients/lib64文件夹下只有release文件夹,将其名字修改为debug;

        同时,修改以下release文件夹名称为debug(或者复制文件夹):$(DR_ROOT)/build/client/lib64/release、$(DR_ROOT)/build/lib64/release、$(DR_ROOT)/build/ext/lib64/release

$(SIM_ROOT_ARM)/dynamorio/bin64/drrun -debug -loglevel 1 -c $(SIM_ROOT_ARM)/dynamorio/clients/lib64/debug/libdr-frontend.so -roi 0 -f 0 -d 0 -b 0 -o NAME_OF_TRACE -e 0 -s 0 -r 0 -stop 0 -verbose -- PROGRAM
#即可产生NAME_OF_TRACE.sift文件

转载请说明出处内容投诉
CSS教程_站长资源网 » 前端arm-后端x86 trace提取-snipersim

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买