【发布时间】:2017-08-03 09:07:46
【问题描述】:
直接问我的问题:如何使用 32 位 ASM 编译器编译我的 ASM 文件,将其包含在我的 64 位项目中,并使用 ASM 文件的函数名访问编译后的代码?
如果有点不清楚,我可以详细说明:
我正在将我的一个项目从 32 位转换为 64 位,但遇到了技术问题。我的项目编译了一个 ASM 文件并使用编译后的二进制文件作为输入。
当我的项目是 32 位时,这很容易。我在项目中包含了 ASM 文件,并添加了一个构建规则以使用 Microsoft Macro Assembler 编译它们 - 然后我可以通过将我想从 ASM 访问的每个函数导出到 .h 来访问我的 32 位项目中的编译代码头文件并使用函数名访问它(我能够这样做是因为它被编译为 obj 并且链接器知道这些符号,因为我将原型导出到 .h 文件)。
现在,我需要将此代码转换为 64 位,但我仍然需要将 ASM 编译为 32 位代码并且仍然能够执行相同的操作(从我的 64 访问已编译的 32 位代码位程序)。 但是,当我尝试编译它时,它显然无法识别指令,因为现在整个项目正在编译为 64 位代码。
提前致谢。
【问题讨论】:
-
您不能在 64 位进程中加载或运行 32 位代码。您的选择是更新汇编代码(让它编译为 64 位:您可能不需要更改代码);或在自己的进程中运行 32 位代码(与父进程进行某种形式的进程间通信)。
-
@Richard,没说我需要运行它。我需要使用编译后的 32 位代码作为程序的输入
-
@Richard,要清楚,让我们假设我的 64 位应用程序有一个缓冲区,它需要用我的
.ASM文件中编译的 32 位函数代码填充,我仍然需要.ASM文件将包含在我的项目中,但编译为 32 位代码 -
我没有 VS,但我希望它 to be able to customize the buildchain 或处理文件的方式。应该调用
ml而不是ml64。 -
这正是我现在所做的,我将它设置为 ml.exe 而不是 ml64.exe 用于使用自定义构建工具而不是 Microsoft 汇编器的 32 和 64 配置:) 现在代码编译但我还没有检查链接器是否可以正常工作。一旦我得到它的工作,我会把它作为答案发布。
标签: c windows visual-studio assembly x86