有人能够创建 PE COFF 和 ELF 的混合体吗?
我的意思是单个二进制文件可以在 Win32 和 Linux i386 中运行吗?
I mean could a single binary file run in both Win32 and Linux i386 ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是不可能的,因为这两种类型的格式有冲突:
'M' 'Z'
;'\x7f' 'E' 'L' 'F'
。显然,您无法创建一个同时满足这两种格式的文件。
作为对关于多语言二进制文件同时作为 16 位 COM 文件和 Linux ELF 文件有效的评论的回应,这是可能的(尽管 COM 文件实际上是 DOS 程序,而不是 Windows - 当然也不是 Win32)。
这是我拼凑出来的一个 - 用 NASM 编译它。它之所以有效,是因为 ELF 文件的前两个字节 (
'\x7f' 'E'
) 碰巧也是有效的 8086 机器代码(45 字节相对跳转指令)。最小 ELF 标头抄自 Brian Raiter。This is not possible, because the two types have conflicting formats:
'M' 'Z'
;'\x7f' 'E' 'L' 'F'
.Clearly, you can't create one file that satisifies both formats.
In response to the comment about a polyglot binary valid as both a 16 bit COM file and a Linux ELF file, that's possible (although really a COM file is a DOS program, not Windows - and certainly not Win32).
Here's one I knocked together - compile it with NASM. It works because the first two bytes of an ELF file (
'\x7f' 'E'
) happen to also be valid 8086 machine code (a 45 byte relative jump-if-greater-than instruction). Minimal ELF headers cribbed from Brian Raiter.这两种格式差异很大,不太可能混合。
然而,Linux支持通过“解释器”加载不同的可执行格式。例如,通过这种方式,包含 CIL(编译的 C# 或其他 .NET 语言)的编译
.exe
文件可以直接在 Linux 下执行。The two formats are sufficiently different that a hybrid is unlikely.
However, Linux supports loading different executable formats by "interpreter". This way compiled
.exe
files containing CIL (compiled C# or other .NET languages) can be executed directly under Linux, for example.当然。使用Java。
Sure. Use Java.