个内核的比对就要花去数小时。
而此次参与比对的内核将有20个左右完成一个比较完整的比对过程将会出现几百次比对那么就要花数个月的时间不太现实。
因此这次我采用的是简化的比对办法。
通过diff命令来比较两个内核源文件的差异。
Diff使用的是一种更聪明的计算方法虽然最坏情况差不太多但是大多数情况下具有较高的性能7。
通过diff给出的结果可以得知第一个文件增改多少行代码后就可以变为第二个文件。
diff的算法和其实对于修改我们并不介意我们只关心增加多少行代码就可以变为第二个文件。
假设内核A的代码有a行内核B的代码有b行。
而从内核A变化到内核B需要添加c行由内核B变化到内核A需要d行。
由此我们可以得知在内核A中存在有b-c行代码和内核B是相同的。
因此我们将内核A中所存在的内核B的代码行数除以内核A自身的代码行数定义为两个内核的相似度即 A-gtB的相似度 b-c / a 由公式可知A-gtB和B-gtA的计算结果将有可能不同。
因为我们判断相似度的原因不单纯是看二者的差异更重要的是看他们之间的血亲关系的远近因此我们取双向转换中的最大值作为Alt-gtB之间的相似度。
A-B间的相似度 max b-c / a a-d / b 2.1.5 小结 分析方法还有待完善可以看出二进制可执行文件的分析依旧还有很大的难度很容易受到各种外围环境的变化而导致相似度大幅下降.
上一篇:
基于 linux 平台的 libpcap 源代码分析(转)
下一篇:
系统中主要发电机的电力系统稳定器