gpt4 book ai didi

linux - Windows 工具生成的 OMF 文件可以链接到 Linux 中的 GCC 程序集吗?

转载 作者:太空宇宙 更新时间:2023-11-04 10:47:54 25 4
gpt4 key购买 nike

我正在将 Windows VC++ 应用程序移植到 Linux,该应用程序链接到当前由 MASM 生成的汇编程序模块。将其 Windows ABI 假设更改为 Linux ABI 后,我想再次将 MASM 上的模块组装到 OMF(在 Windows 中),然后直接将该目标文件输入到 GCC 构建(在 Linux 中)中。随着时间的推移,这将大大简化维护工作,并保证在两种操作系统下进行相同的组装。另一种方法是将汇编程序代码移植到 YASM/NASM 及其并发症。汇编代码完全是叶例程(没有调用),没有宏,没有 Unicode 数据和很少的整数/实数数据;它包括 32 位和 64 位汇编器版本。除了端序问题,谁的工具链为这个模块生成 OMF 表示真的很重要吗?

最佳答案

我使用一个简单的测试用例对其进行了测试,并且在使用 Linux 下的 GNU 链接器进行链接时它工作正常。所以您可能不需要做任何特别的事情。

这是我测试过的程序集文件:

_TEXT   SEGMENT USE32
PUBLIC foo
foo:
mov eax, 1234
ret
_TEXT ENDS

END

这是 C 程序:

#include <stdio.h>

extern int foo();

int
main() {
printf("%d\n", foo());
return 0;
}

我使用 MASM 在 Windows 上组装了第一个文件,将生成的 .OBJ 文件复制到 Linux 机器 (Debian x86_64) 并使用以下命令编译/链接它:

gcc -m32 main.c foo.obj

运行生成的可执行文件 (a.out) 产生了预期的输出:1234。我还测试了等效的 64 位情况,它也能正常工作。

除非您依赖于特定于 PECOFF 的部分(段)排序或其他特定于 PECOFF 的功能,否则看起来您应该没有任何问题,至少目标文件格式如此。请注意,您的 Linux 机器上安装的 GNU 链接器版本可能不支持 PECOFF。在这种情况下,您可能需要从源代码构建自己的版本。

关于linux - Windows 工具生成的 OMF 文件可以链接到 Linux 中的 GCC 程序集吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32290563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com