如果你知道编译器,你能反编译代码吗?

逆向工程 艾达 反编译 德尔福
2021-06-16 10:58:36

我的公司有少量 .exe 是在 80 年代编写的,用于执行一些次要的重要任务。源代码不见了,文档也很稀缺。为了运行它们,我们需要使用 DOSBox。我的团队希望将流程变成现代语言,以便我们可以维护代码,并在可能的情况下查看程序的运行方式。以前尝试储备工程师失败了,我相信是因为没有足够的时间来解决这个问题。我做了一些探索,看看有什么可能。到目前为止,这是我认为我发现的:

  1. 使用 IDA PRO 5.0 我可以将代码恢复到汇编状态。代码看起来很实用。
  2. 从上面可以看出,原始代码是 Pascal 或 Delphi。
  3. 看起来我可以看到使用什么编译器(Borland)来创建 .exe 文件。

我的问题是,如果我知道编译器是 Borland,我可以使用该信息返回相对正确的源代码吗?我知道变量名会很糟糕,它可能还有其他需要调试的问题,但是只要回到带有循环和定义的函数调用和方法的代码的基本结构就会很棒。如果没有,我是否一直在努力学习汇编以更好地了解正在发生的事情?

1个回答

对于大多数语言——尤其是那些直接编译成机器代码的语言——了解编译器是否可以更容易地反编译它们的答案是否定的。不久前我写了一篇文章解释了机器代码反编译器面临的困难通过了解编译器,它们都不会变得更容易。

但是,您的问题没有提到任何特定的机器代码反编译器,例如 Ghidra。它有可能使您的生活更轻松,通过为您提供一个相当好的交互式源代码近似值(即,允许您更改名称和类型、添加注释等)。我建议给它看看。不管怎样,汇编语言都会参与到这个过程中。