首先查看gen_distance_fast.py的main函数
第一步是生成CG
然后通过:calculating_distances计算距离
第一次调用exec_distance_prog生成CG距离,第二次生成CFG距离
exec_distance_prog是通过python_only的值来选择是调用C++文件还是Python文件
然后查看distance_calculator下面的main.cpp
前面大段程序就是加载图详细信息
主要看下面cg那块判断
然后看cg距离计算,先读入节点,然后计算距离
这里采用的是bfs的方法,一开始初始化都为0 ,然后通过遍历搜索之后获得了最短路径之后,将权重修改,然后后面计算最短距离,根据节点和距离匹配的得到最短距离,然后计算调和平均数.这一阶段过去了,下一个阶段计算CFG距离,会先计算BB距离
计算BB距离,在原论文中分为3部分,但是有一部分属于他函数本身的话是为0的,所以只需要计算的是所有函数的集合,然后10倍就行了,然后就是需要CG的距离,这里可以当做他是个字典,得到CG的节点跟距离
然后执行下面那个else的for循环,如何就计算好距离了,最后插桩,就可以动态的知道距离目标节点的距离(但是这个方法针对于多个目标节点的话,存在误差,首先是在Hawkeye里面提到了他这个距离有毛病,然后使用了更详细的分析,像对象指针那样的调用,但是吧画个图你就知道了,他这个毛病仍然是没有解决的)