在main函数准备阶段,AFLNet比AFL多加了一个setup_ipsm函数,这里记录一下该函数的分析过程。
什么是ipsm
Implemented Protocol State Machine,协议状态机
setup_ipsm
/* Initialize the implemented state machine as a graphviz graph */
void setup_ipsm()
{
// 创建一个有向图形对象g,没有回调函数
ipsm = agopen("g", Agdirected, 0);
// agattr()函数用于设置图形对象的属性。这里将节点(AGNODE)的颜色属性设置为黑色("black"),边(AGEDGE)的颜色属性也设置为黑色。
agattr(ipsm, AGNODE, "color", "black"); //Default node colr is black
agattr(ipsm, AGEDGE, "color", "black"); //Default edge color is black
// kh_init()函数用于创建一个哈希表(Hash Table)的实例,并将其赋值给变量khs_ipsm_paths
// 这个哈希表用于存储IPS状态机的路径信息
khs_ipsm_paths = kh_init(hs32);
// kh_init()函数被用来创建另一个哈希表的实例,并将其赋值给变量khms_states。
// 这个哈希表用于存储IPS状态机的状态信息
khms_states = kh_init(hms);
}
agopen函数
这个函数中文网站介绍比较少,先去问下bing,如果回答不行,就去google一下:
bing回答的很清楚。