13

如果我有一些 .dcu 文件;我怎样才能知道它们是用哪个 Delphi 版本编译的?

我收到了一些旧的源代码,其中包含一些 .dcu 文件,我无法访问原始源代码。我想重构这个库,但为此我想先让它在原始的 Delphi 版本中编译。


顺便说一句,编译器在这里可能会更有帮助。它指出文件 X 是用“不同”版本编译的,但没有说是哪个版本....

4

3 回答 3

22

从非官方来源,查看 .dcu 的第 4 个字节

$0F = Delphi 7
$11 = Delphi 2005
$12 = Delphi 2006 or 2007
$14 = Delphi 2009
$15 = Delphi 2010
$16 = Delphi XE
$17 = Delphi XE2
$18 = Delphi XE3
$19 = Delphi XE4
$1A = Delphi XE5
$1B = Delphi XE6
$1C = Delphi XE7
$1D = Delphi XE8
$1E = Delphi 10 Seattle
$1F = Delphi 10.1 Berlin
$20 = Delphi 10.2
$21 = Delphi 10.3
$22 = Delphi 10.4

从 Delphi 2006 到 Delphi 2007 的 .dcu 格式没有变化。因此他们使用相同的格式。

编辑 2016 年 7 月 2 日将 XE8、10 和 10.1 添加到列表中。

根据要求,还可以在 .dcu 的第二个字节中找到目标平台。值当然只对具有这些目标的版本有效。

$03 = Win32
$23 = Win64
$04 = Osx32
$14 = iOS emulator
$76 = iOS device
$77 = Android

如果您认为有错误,请告诉我。

于 2015-02-20T07:48:11.940 回答
5

在寻找答案时,我遇到了 Alexei Hmelnov 的一个很棒的在线工具。

它可以让你上传一个 .dcu 文件,它会给你关于它的非常详细的信息。

http://geos.icc.ru:8080/scripts/WWWBinV.dll

它显示了使用的编译器、编译时间、使用的单位等。

于 2015-02-23T15:22:21.167 回答
3

DCU 文件是 Borland(现为 Embarcadero)开发的专有格式,作为编译代码和源代码之间的中间数据。这就是 Delphi 编译器能够如此快速地生成可执行文件的主要原因。关于这种格式的信息是故意稀缺的。Borland 没有提供有关它的文档,Embarcadero 似乎也走上了同样的道路。有一个名为“DeDe”的实用程序可以反汇编由旧 Delphi 版本创建的编译文件,并提供有关这些文件的一些信息,包括 dcu 文件版本。它不适用于比版本 5 更新的 Delphi 编译器生成的二进制文件,但包含源代码,也许可以改进。

于 2015-02-19T23:44:08.880 回答