15.一个较为详细的有关实验环境和实验数据集一些基础实验设计?
(服务器在稿子上有)
实验数据集源自两个广泛应用于物联网设备的开源软件组件:OpenSSL (版本v3.0.0 alpha13)和binutils (版本v2.36.1)。在实验过程中,所有函数都是针对三种不同的架构(i386、armhf、mips,均为32位)采用了两种不同的编译器(gcc v8.3.0.6和clang v7.0.1.8),以此构建多样化的编译环境。对于每一种编译器与架构的组合,均使用了五种不同的优化级别(-O0、-O1、-O2、-O3和-Os),以此考察编译优化级别对实验结果的影响,确保实验的全面性。
为了能够在编译后准确还原函数名,所有二进制文件都特别在编译过程中保留了调试信息(-g flag),从而保持实验数据基本的真实性和可追溯性。随后,使用radar 2工具从生成的二进制文件中提取ACFGs。最后,为了合理划分数据集并保障模型的训练效果,将数据集按照70%、15%、15%的比例划分为训练集、验证集和测试集,其划分方式如下:
(1)所有源自同一源函数的ACFGs都被归纳至同一集合之中。这一设计使得在训练期间即便面对未知的函数,也能有效地进行验证和测试工作。
(2)对于实验中所涉及的所有软件组件,即OpenSSL和binutils,均采用了相同的培训/验证/测试比率。
值得注意的是,对于本次实验中所提取的所有图形,都设定了最小大小为6的设计要求。这一限制旨在确保所提取的图形具备足够的复杂性和信息含量,以支持后续的模型训练和性能分析。
16.有关超参数的详细设置?
原始GESS方法中的所有实验都是使用TensorFlow 2.3.0进行的,在超参数的选择上,本文参考了GESS原本的思路,即逐一调整某个参数,同时保持其他参数不变。针对每个超参数,都通过验证AUC来确定其最佳取值。对于每个超参数配置,模型都会进行固定数量的S个训练时期。为加快实验进程,本文采用了相同的批次处理方式,并在迭代之间仅进行必要的重新计算。此外,验证损失仅在完成S个训练周期后计算一次,该损失值即为本文期望最小化的目标。
为了调整标记函数的权重,本文采用了模拟退火算法,这是一种元启发式算法,只在找到给定函数的(近似)全局最优值。在初始阶段,所有权重pi
均被设置为0。随后,在每次迭代中,通过向其中一个权重添加一个在[-1,1]范围内均匀分布的随机值(不包括0),来计算权重向量的邻近解。在调谐过程中,本文参照原始GESS,选择S=7
作为训练周期数,并设定模拟退火参数λ=0.95
,初始温度T0=0.7
,以及结束温度Tend=0.002
。
为了优化感受野的数量K及其大小W,采用网格搜索方法,即在预设的参数范围内,通过遍历所有可能的参数组合,来寻找最优的参数配置。在追求一个更为精简且高效的CNN实现过程中,参考原始GESS,本文将这两个超参数都设置为8。对于CNN的网络深度(这部分讲稿上有)这一选择是基于其能够获得最高的验证AUC值,从而尽可能确保模型的性能达到最优。
17.pi的i为什么取值范围为1-9?
GESS首先根据ACFGs的属性来为ACFGs的节点打上标记。会采用属性的线性组合来定义节点的标签。从形式上来看,一个节点具有9个属性vi
,其中1≤i≤9,这些属性将会共同构成该节点的标签:i=19vipi
,其中pi
,1≤i≤9
是属性的权重。在提取ACFG的过程中,针对每个基本代码块采用以下九个属性:算术指令的数量、逻辑指令的数量、转换指令的数量、数据操作指令的数量、呼叫指令的数量、跳转指令的数量、其他选定指令的数量、引用数据或代码的次数、总指令数。
18.为什么第一个表里对比没有Gemini只有两个GESS?
因为Gemini提取ACFG和训练验证未分开,且时间相对较长,因此只给出最后测出的AUC值和时间进行对比。不再列到表格中。
19.一个简单的各个程序是干什么的介绍?
The details of the convolutional neural network are in `cnn.py`. The model can be trained and tested using `main.py`.
## Parsing data to JSON format
GESS take ACFGs in JSON format, with sparse matrices. This requires to set the parameter `adjacency_matrix` in `parse_data` to False.
## Train / Test a model
Model training uses `main.py`.
It runs until validation AUC reaches a maximum and doesn't improve for 25 epochs.
Then it loads the best model and tests it on the testing data. It will output the ROC curve in csv format.
The parameters in the code allow to bypass training or testing.
## Compute embeddings
When given a model and JSON file as parameters, `compute_embeddings.py` will compute the embeddings of all ACFGs in the testing dataset
## Create Top-K Precision/Recall Curve
The file `similarities.py` uses the embeddings computed by `compute_embeddings.py` and can output precision and recall accross the top-K closest candidates, for K up to 200 (tunable in code).
## Train specifically to improve Top-K Precision/Recall
Using `validate_differently.py` instead of `main.py` in order to train a model will return a model with lower ROC AUC, but trained faster and with better Top-K validation and recalls.
## Package version
The code originally depends on TensorFlow 2.3.0, PyTorch 1.7.1 and PyTorch-Geometric 1.7.0
卷积神经网络的细节在“cnn.py”中。
##将数据解析为JSON格式
GESS采用JSON格式的ACFG,带有稀疏矩阵。这需要将“parse_data”中的参数“accordy_matrix”设置为False。
##训练/测试模型
它一直运行到验证AUC达到最大值,并且在25个时期内没有改善。
然后加载最佳模型,并在测试数据上进行测试。它将以csv格式输出ROC曲线。
代码中的参数允许绕过训练或测试。
##计算嵌入
当给定一个模型和JSON文件作为参数时,“compute_embeddings.py”将计算测试数据集中所有ACFG的嵌入
##创建Top-K精度/召回曲线
文件“similations.py”使用由“compute_embeddings.py”计算的嵌入,可以输出精度并调用前K个最接近的候选者,K最多可达200(可在代码中调整)。
##专门培训以提高Top-K精度/召回率
使用“validate_edifferential.py”而不是“main.py”来训练模型将返回ROC AUC较低、但训练更快、Top-K验证和召回更好的模型。



