【问题标题】:Can 32-bit assembly code be ran on a 64-bit processor? (Delphi)32 位汇编代码可以在 64 位处理器上运行吗? (德尔福)
【发布时间】:2013-08-08 23:41:54
【问题描述】:

我正在用 Delphi 编写一个程序,其中包括一个包含一些汇编代码 (Pipes.pas) 的库。当我运行调用一个名为 StdWndProc 的函数的代码时,我遇到了访问冲突。该过程是一个包含汇编代码的汇编函数。

不久前我更新了这段代码 (Pipes.pas) 以包含 unicode 支持和其他内容,但我不知道这个程序集在做什么。关于这里出了什么问题的任何想法?

我在 64 位机器上运行,可能是这个程序集是 32 位的,在 64 位处理器上运行不正确(该项目针对 32 位构建)。

【问题讨论】:

  • 如果您正在为 32 位应用程序编译,32 位程序集应该可以正常工作,因为 Delphi RTL 的主要部分在 32 位目标中使用 32 位程序集。如果您的目标是 64 位构建并尝试使用 32 位库,这显然不起作用。你能edit你的问题提供你得到的确切错误信息吗? “我遇到了访问冲突”完全含糊不清,无法使用。
  • 我非常怀疑...您使用哪个版本的 Delphi 来编译您的代码?和你用来创建代码的一样吗?请注意,在 Delphi 2009 中,Unicode 支持成为默认选项,因此将旧的 Delphi 代码迁移到 2009 之后的版本需要一些额外的工作。有关这方面的更多信息,请参阅link
  • 请在您使用的 Delphi 版本上包含一个标签。如果可能,还要更具体地说明您的问题:在什么情况下会崩溃,以及在什么情况下可以正常工作。 pipes.pas是你自己写的,还是只改?
  • 我唯一一次遇到在 64 位操作系统上运行 32 位代码的问题……是在进行一些 Windows 安全 API 调用时……当 Windows 更改了底层数据结构(从 32 位到 64 位结构)但没有给出任何发送或更改数据结构的方法...support.microsoft.com/kb/920754

标签: delphi assembly


【解决方案1】:

32 位进程执行 32 位代码。无论该代码是从汇编程序还是 Delphi 或其他语言编译的,都无关紧要。

不管机器是 64 位还是 32 位,32 位进程运行 32 位代码。在 64 位机器上,32 位进程在名为 WOW64 的模拟 32 位机器中运行。

从概念上讲,您正在尝试的是可能的,因此结论是您的代码存在错误。

【讨论】:

    【解决方案2】:

    正如 David Heffernan 指出的那样,您的问题的原因几乎不可能是操作系统架构。

    如果您的代码在 32 位机器上运行没有错误,但无法在 64 位机器上运行,则可能是操作系统问题。这可能是由于使用了 32 位独占目录(如 SD:\Program Files 在 64 位窗口上称为 SD:\Program Files(x86)对于 32 位程序)、注册表反射(这会导致您的程序将注册表数据存储在 Wow3264Node 键下),甚至使用旧的 16 位 DLL (可以没有在 wow3264 下运行),但这是非常罕见的情况,因为它是 2013 年......

    为了能够提供帮助,我需要如何您的代码无法正确运行的更多详细信息。

    (请注意,原来的问题已经回答了,我只是想提供一些更有用的帮助。)

    【讨论】:

      猜你喜欢
      • 2011-01-30
      • 2014-02-01
      • 2013-02-23
      • 1970-01-01
      • 2011-08-05
      • 2017-10-20
      • 1970-01-01
      • 2016-01-02
      • 2011-01-14
      相关资源
      最近更新 更多