首页 > 解决方案 > POSIX 系统和/或 Windows 的 SCS_POSIX_BINARY 的字长(“位”)是多少

问题描述

在研究 WinAPI 文档时,我偶然发现了SCS_POSIX_BINARY。据称,MS Windows 可以在某种程度上执行 POSIX 可执行文件(尽管Wine 文档将它们列为“未实现”

假设 POSIX 可执行文件可以运行,SCS_POSIX_BINARY 的标准字长(“位”)是多少?例如,对于 MS Windows =< 2010,字长通常为 32 位。POSIX 和/或 Microsoft 的 POSIX 实现(如果有)的等价物是什么?

干杯

标签: windowswinapiposix

解决方案


字长总是 <= 内核的字长,因此在 32 位操作系统上,所有 POSIX 工具的字长都将是 32 位。

SUA (2003 R2)的 Microsoft网站说:

这些组件包括随 Windows Services for UNIX 3.5 一起安装的所有实用程序。这些是近 300 个基于 BSD 的可选 SUA GNU 实用程序。其中许多实用程序(大约 80 个)也可用于 64 位版本。

我可以从中得出的唯一结论是 64 位版本的 Windows 支持这两者。要确定这是准确的,您实际上必须在 64 位计算机上安装 SUA。

GetBinaryType是一个非常古老的功能,所以我的猜测是它只检查它是否是 POSIX PE 而不会查看机器类型。如果您真的在乎,那么您可以自己阅读标题并查看。

编辑:

我下载了 SUA 安装程序并查看了一下,它确实包含 32 位和 64 位 POSIX PE 可执行文件。

对于 32 位(垃圾箱):

FILE HEADER VALUES
             14C machine (x86)
               C number of sections
        ...

OPTIONAL HEADER VALUES
             10B magic # (PE32)
         ...
           2736E checksum
               7 subsystem (Posix CUI)

SCS_POSIX_BINARY按预期返回,但对于

FILE HEADER VALUES
            8664 machine (x64)
            ...

OPTIONAL HEADER VALUES
             20B magic # (PE32+)
           ...
               0 checksum
               7 subsystem (Posix CUI)

它实际上返回了SCS_64BIT_BINARY!因此,如果您想要真正的答案,您实际上必须自己检查 PE 标头。


推荐阅读