【问题标题】:What file format can be executed across windows, linux and mac什么文件格式可以跨windows、linux和mac执行
【发布时间】:2020-04-27 17:00:52
【问题描述】:

给定一些纯机器语言命令,例如以下字节:

1011100010011010000000100000000000000000
11000011

(取自:How to write and execute PURE machine code manually without containers like EXE or ELF?)?我知道通常需要一个 .EXE、ELF 或 .OUT 包装器,但据我所知,这些格式是特定于平台的,只是为了能够双击并运行它们。

是否存在可以跨windows、linux、mac双击运行相同机器码(假设没有外部依赖)的文件格式?

【问题讨论】:

  • 我不知道没有安装的东西。 Linux + Mac 可能会在 bash 之类的东西中协同工作,但 Windows 不行
  • @afghanimah 嗯,很有趣,所以没有任何东西可以在所有 3 中本地双击(甚至只是在终端中运行)? unity的跨平台游戏构建是如何工作的?
  • Unity 使用 C#,所以它使用 C# 的跨平台机制(即 .net 字节码),加上一些针对各种操作系统的自定义代码,我敢肯定。
  • @ErikEidt 你是什么意思,C# 肯定会编译成机器语言吗?但即便如此实际相同的程序可以在任何平台上双击,它是如何工作的?
  • @bluejayke Unity 只是带有一些 Unity 库的 C#,这些库编译为 IL,由 .NET 或 Mono Runtime 通过使用 JIT 编译器将 IL 转换为您正在使用的机器的机器代码来解释。

标签: cross-platform exe elf out machine-language


【解决方案1】:

是否存在可以跨windows、linux、mac双击运行相同机器码(假设没有外部依赖)的文件格式?

简短的回答是否定的。

更长的答案是您混合了概念和抽象级别:双击不是操作系统级别的概念,并且没有操作系统运行响应双击的二进制文件。

它们都运行二进制文件以响应execve 或CreateProcess 系统调用,并且没有通用文件格式可以被所有 Linux、Mac OS 上的操作系统接受和窗户。

unity 的“windows、mac 和 linux 独立”游戏构建如何工作

与 Python foo.py 文件在所有平台上的工作方式相同:有一个 native 二进制文件解释游戏中包含的代码。本机二进制文件在每个平台上具有不同的文件格式(Linux 上为ELF,Mac 上为Mach-O,Windows 上为PE)。

【讨论】:

  • 那么,Unity 的“windows、mac 和 linux 独立”游戏构建是如何工作的,如果它是可以在任何一个中打开的同一个程序?
  • @bluejayke 我可以向您保证,在每个操作系统上运行的 binary 都不相同。至于他们是如何做到这一点的,你应该看看看看。
  • @bluejayke Unity 只是带有一些 Unity 库的 C#,这些库编译为 IL,由 .NET 或 Mono Runtime 通过使用 JIT 编译器将 IL 转换为您正在使用的机器的机器代码来解释。
  • @EmployedRussian 哦,没有意识到 untiy 的原生二进制文件对每个平台都有不同的形式
猜你喜欢
  • 2021-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
  • 2011-06-10
  • 2014-08-30
  • 2021-02-14
  • 1970-01-01
相关资源
最近更新 更多