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

03-11 阅读 0评论

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

前端arm-后端x86 trace提取-snipersim,前端arm-后端x86 trace提取-snipersim,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,我们,安装,第1张
(图片来源网络,侵删)

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

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

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

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

1.Snipersim
1.1 snipersim部署

按照以下步骤进行

#snipersim源码
git clone https://github.com/snipersim/snipersim.git 
#将snipersim源码路径记为SIM_ROOT_ARM,但个人直接笨方法,路径全部列出
#只编译libsift.a成功即可
cd $(SIM_ROOT_ARM)/sift
#snipersim的编译需要在python2的环境中,下面会进行python2环境搭建

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

前端arm-后端x86 trace提取-snipersim,前端arm-后端x86 trace提取-snipersim,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,我们,安装,第2张
(图片来源网络,侵删)
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.com)​​​​​​

在网页的readme中找到相应架构所对应的压缩包,我选择的是第二个aarch64结构的:
前端arm-后端x86 trace提取-snipersim

#在arm板子上,以下链接是当时最新链接
wget https://github.com/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文件中修改如下内容,使之能成功识别我们的板子即可

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

前端arm-后端x86 trace提取-snipersim,前端arm-后端x86 trace提取-snipersim,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,我们,安装,第5张
(图片来源网络,侵删)

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

#进入py2的环境下
make

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

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

2 DynamoRIO

按照如下步骤进行

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

#dynamorio源码下载,记dynamorio根目录为DR_ROOT
git clone --recurse-submodules -j4 https://github.com/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的根目录
前端arm-后端x86 trace提取-snipersim

2.2 未定义droption_t报错

在文件$(DR_ROOT)/clients/dr-frontend/dr_fe__options.h和$(DR_ROOT)/clients/dr-frontend/dr_fe_options.tcc加入以下内容:
前端arm-后端x86 trace提取-snipersim

2.3 dyn_addresses数组越界

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

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

完成以上修改,在进行make

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

 随便写个代码:test.c

#include 
int main(){
	printf("hello, world");
	return 0;
}
 gcc -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文件


免责声明
本网站所收集的部分公开资料来源于AI生成和互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,人围观)

还没有评论,来说两句吧...

目录[+]