逆向工程的一个关键目的是恢复工件的抽象设计。
源程序是一个概念的实现。它包含大量实现效果的代码/门,然后在此基础上进行优化以合理地实现效果(空间、时间、热量、面积、功率等)。它专注于良好的执行,而不是良好的概念文档。
对于正在运行的产品来说,这一切都很好。但是,如果您想了解您拥有的代码(并且您犯了将设计扔掉的错误[每个人都有,不要让我开始说这很愚蠢]),然后抽象出所有详细的实现,留下抽象的结构和计算,非常有帮助。
这是我写的关于如何以常规方式执行此操作的技术论文(上个世纪 [!],仍然很好,恕我直言): 逆向工程是逆向工程。本文从实时操作系统中提取低级汇编代码,并将其抽象回其实现的同步原语。从本质上说什么它说的是,“这个概念是在像代码实现这个在这些代码中的地方”。
这个想法部分源自 Rich 和 Water 著名的(?)1980 年中期对程序员的学徒的研究。在他们的案例中,他们专注于在代码中找到抽象的实现,通过做相当于数据流图匹配的事情。(已经有许多其他论文和博士论文提出了类似的想法)。我的 RE 论文建议在低级识别之上嫁接整个设计模型。
我的公司最近为陶氏化学实施了 Rich&Water 的愿景,从低级工业控制器代码中提取过程控制模型。陶氏正在使用它来将运行化工厂的遗留代码迁移到现代控制器。请参阅Dow Chemical 的 SD 构建工具。这只是宣布工作,但我们已经这样做了几年并且取得了很好的结果。我们希望尽快为技术期刊撰写本文,并将其应用于更传统的语言,例如 C。
我断言所有这些想法也适用于硬件和协同设计。