【问题标题】:Dcu in Delphi XE2Delphi XE2中的Dcu
【发布时间】:2011-11-26 02:22:01
【问题描述】:

delphi xe2 中用于firemonkey 应用程序的*.dcu 文件是否独立于平台。 here。适用于 32 位和 64 位以及其他操作系统。

如果是,那么 dcu 文件是如何设计的。它是类似于以前的(delphi 1-delphi xe)还是类似于中间语言(如 java 或 .net)的东西

这个新的 dcu 是否会让 dcu 文件的反编译变得更容易。

这个问题的主要目的是了解一些关于firemonkey新dcu文件优缺点的细节。

【问题讨论】:

  • 该链接并不表明在 Mac 上编译的 dcu 文件是独立于平台的。我相信需要单独的Mac编译,制作出来的dcu不会和windows下编译出来的dcu不兼容(我也不指望windows下32位和64位编译能互相兼容。
  • @Larry Lustig,否则,目标文件是特定于 CPU 的,而不是特定于操作系统的。但是,没有人会肯定地说,dcu 文件格式是内部和私有的。 AFAIK,目前没有人研究这个主题。
  • @Downvoter 没那么简单。目标文件特定于 CPU 和平台 ABI。 Mac 和 Windows 有非常不同的 ABI。
  • @David Heffernan,一般情况下 ABI 不是问题。然而,诚然,任何与操作系统互操作的尝试都会破坏这种“可移植性”。
  • @Downvoter ABI 绝对是个问题。想想 Mac 上的堆栈对齐要求。 ABI 如此重要的原因还有很多。

标签: delphi delphi-xe2 firemonkey cross-compiling


【解决方案1】:

delphi xe2 中用于 firemonkey 应用程序的 *.dcu 文件是 独立于平台。这里。适用于 32 位和 64 位以及其他 操作系统。

不,他们不是; Delphi XE2 为不同平台生成不同的.dcu 文件,每个平台的.dcu 文件在不同的文件夹中创建。

【讨论】:

    【解决方案2】:

    为了更深入一些,一些背景信息:

    DCU 或多或少是以下部分的组合

    1. 目标代码,即普通静态编译的可重定位目标代码,就像 C 或 C++ 生成的一样。
    2. 包含调试代码(如果我没记错的话是 Topview 变体)
    3. 某种形式的预编译头(接口)。
    4. 某些表示形式的非专业泛型 (*)
    5. 跨单元内联代码(树表示?)

    我不知道这 4 个部分是否都是单独的部分,或者它们是交错的。我的猜测是 1+2 被组合在一起(因为它允许在链接器中使用更通用的例程)并且有一个 3+4+5 的“休息”,也许还有其他一些元数据。

    由于标头可能取决于系统单元和操作系统特定单元中的操作系统特定类型和符号,即使理论上只有最独立的单元可以是跨平台的。可能不值得费心去打扰。

    就反编译而言,它与一般的反编译问题几乎相同,只是有一些曲折:

    1. 尚未最终链接的(对象)代码更容易反编译
    2. 带有附加调试代码的代码更容易反编译。
    3. 但 DCU 格式取决于版本和专有。
    4. 整个反编译过程非常依赖于编译器和版本。

    简而言之,它可能并不比早期的 Delphi 编译器甚至是随机 C++ 编译器的静态 lib + 头文件容易一点。

    【讨论】:

      猜你喜欢
      • 2012-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      相关资源
      最近更新 更多