检测文件(或字符串)是否已修补的算法

时间:2014-11-15 11:01:24

标签: string algorithm compare patch datediff

此问题与字符串算法有关,而不是版本控制工具或管理工具。

我学会了diff算法并试图实现一个。也就是说,给定字符串A和字符串B,diff计算可以将A转换为B的一系列动作。

我想知道,如果可能的话,给定一个字符串S,以及diff算法可以产生的一系列动作,算法将判断字符串S是否是(a)原始字符串A,(b)修补后的字符串B ,(c)不相关的字符串。如果S只是A和B中的一个,该怎么办?

实际上,我真正在做的是研究一种方法,该方法可以判断是否已应用补丁(源代码级别或二进制代码级别)。我试过谷歌一段时间,但没有找到有用的东西。

1 个答案:

答案 0 :(得分:0)

这很复杂,但可以在某种程度上完成。

基本上,您将源级别解析为标记,然后构建抽象语法树。完成后,您必须构建一个可以在抽象语法树之间执行semantic differential analysis的diff工具。例如,SemanticMerge就是这样做的。

完成后,两个源代码之间存在语义差异,然后您需要定义完全由补丁组成的内容。

一些规则可以是:

1)变量内容已更改

2)添加了if支票

最重要的是,补丁和新功能之间的区别不是一件容易的事。最可靠的方法是检查二进制文件版本号,并了解版本控制架构。

例如,如果应用了补丁,则仅更新次要版本。