因此,总的来说,问题是:
我需要在程序的系统调用跟踪上实时执行“最长公共子序列”。现在我们要做的是,我们有一组〜250个签名,每个签名包含〜40个系统调用。我们捕获与程序线程相关的1K块系统调用,看它是否与任何签名的70%匹配,然后返回结果。然后将数据块移动300并在新集合上执行检测。
如您所见,有两个条件可以帮助更快地执行检测。首先是在检查每个签名时,1K系统调用集将保持不变。其次,如果LCS的长度已经超过签名的70%,我们将返回true。
我已经实现了递归方式,使用这种方式,我可以计算出每次递归中计算出的当前LCS长度,如果它已经大于签名的70%,则抛出一个出口。另外,我还要进行预处理以维护“位置Y之后发生系统调用X”的矩阵。并在所有要检查的签名中使用此数组。
仍然无法获得可行的解决方案,该算法似乎仍然很慢。考虑到我的具体情况,我也想不出对动态算法的任何改进。有什么建议吗?