windows - POSIX 系统和/或 Windows 的 SCS_POSIX_BINARY 的字长(“位”)是多少
问题描述
在研究 WinAPI 文档时,我偶然发现了SCS_POSIX_BINARY。据称,MS Windows 可以在某种程度上执行 POSIX 可执行文件(尽管Wine 文档将它们列为“未实现”)
假设 POSIX 可执行文件可以运行,SCS_POSIX_BINARY 的标准字长(“位”)是多少?例如,对于 MS Windows =< 2010,字长通常为 32 位。POSIX 和/或 Microsoft 的 POSIX 实现(如果有)的等价物是什么?
干杯
解决方案
字长总是 <= 内核的字长,因此在 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 标头。
推荐阅读
- npm - 如何全局安装 gulp
- ios - Σ iOS SDK 中的计算
- openmodelica - 无法在 PyFMI 中模拟 OpenModelica ThermoSysPro FMU
- java - 如何在我的 Number.txt 文件中找到最大和最小的素数?如何读取文件?
- svelte - 将选定的 Svelte 组件编译为 CustomElements
- html - 如何修复 Ruby on Rails 中的“Unpermitted parameter: :avatar”错误
- stm32 - stm32 spi全双工从机模式
- jquery - 如果下拉菜单有更改,如何重置或未选中的单选按钮
- apache-kafka - 为什么kafka logs dir和zookeeper数据都是空的?
- django - 将芹菜任务重定向到其他队列但不使用它