代码地址:GitHub - inoueke-n/optimization-detector: Optimization detection over compiled binaries [[Identifying Compiler and Optimization Level in Binary Code From Multiple Architectures]]
准备
- 实验用到的数据集 following link.
- 也可以自己按照 readme. md 文件中的 generation 节中的步骤来自己生成数据集。(因为文章中提到的担心被库文件污染,所以需要 docker 环境来生成)
文档结构
- Resources 存储测试的二进制文件
- Tests 和 src 文件存储源代码
generate_dataset.py
文件负责生成数据集(准确的说是交叉编译生成所需的二进制文件)optimization-detector.py
文件负责文件的提取(可执行数据),预处理(平衡数据集),训练、评估、推断。
数据集文件结构
-
Dataset 文件夹下的是已经经过预处理的数据集,raw 后缀表示采用原始字节作为输入,func 表示按照函数边界进行了拆分
- 但是没有优化等级是 O3 的数据啊
-
突然懂了这个逻辑,process 的输入是 func 和 raw 文件,输出 train. bin、test. Bin、validate. Bin 文件,然后 train 用 train. Bin 、validate. Bin 文件训练,evaluate 用 test. Bin 看效果
-
Multi 表示将 gcc 和 clang 混合
复现
首先要安装依赖 因为直接用作者数据集,所以先跳过数据生成和处理的部分
评估
python3 optimization-detector. py evaluate -m <model> -o output. csv <dataset_dir>
- Model 是. h5 文件
- Dataset_dir 是 test. bin 文件,但是注意这里写路径就行,不用指明文件名(因为代码里面写死了文件名就是 test. bin)
- 这里有个坑,代码里面会验证数据集的第一个字节是不是 27,但是作者给的数据集里面的数据文件第一个字节都是 26,需要手动改一下
- 2.27,现在卡在了作者自定义的 generator 类与 TensorFlow 的 data_adapter 不协调上
训练
python3 optimization-detector.py train -n <network_type> <model_dir>
network_type
选择 lstm 或者 cnnmodel_dir
是包含数据集(预处理后)的文件夹- 会在
model_dir
路径下生成logs
文件夹
问题
- 数据集里面怎么还有一个代码文件
- 没有 O3 级别的数据集
- 貌似也没有区分架构
- 为什么多分了一个全连接层的模型
- Mixed 未知