1

对我来说,这听起来像是不可能完成的任务,但有些人比我知道的多,所以我想也许我有机会 :)

我想要 1 个可以在 Windows 和 linux 上执行的文件。

基本上,程序可以由两部分组成。
第 1 部分是可以在 Windows 上运行的 Windows 可执行文件。
第 2 部分是可以在 linux 上运行的 linux shell 脚本。

有没有办法以这种方式构建文件,Linux 可以忽略 Windows 二进制可执行字节,只运行作为文本附加到二进制 Windows 可执行文件的 shell 脚本?

我试图在 windows exe 之前添加字节,当然 windows 无法识别该文件。所以是的,我不能在可执行文件的字节之前放任何东西,但是我可以在文件末尾添加它们。

然后,在 linux 上,我采用了纯脚本

#!/bin/bash
echo "Hello world?"
exit 0

并在脚本之前添加了一些文本。它所做的只是抱怨不存在的命令,但继续执行该文件,我得到了“hello world”文本输出。

把这两件事放在一起(cat runLinuxPart.sh >> myMix.exechmod +x myMix.exe然后运行它,我得到The entry point method could not be loaded:(

linux shell 文件是一种自解压安装程序。它把 .tar 放在最后,把脚本放在前面,所以如果我在 linux 上运行 .sh,它会得到 .tar,提取并完成我需要的一切。

windows exe的目的是连接远程linux机器,从自身提取.sh文件并上传到linux,然后运行它。

我想给用户一个单独的安装文件。

如果这是我的梦想是不可能的,我当然也可以接受 2 个单独的安装程序

4

1 回答 1

2

Linux shell 脚本应该以#!. Linux ELF可执行文件应以\x7FELF. 如果 Windows 可执行文件不能以这些字节开头,那么您的梦想就不可能实现。我相信PE(Windows 可执行文件的二进制格式)不能以这些开头(但我不确定)。因此,您的通用安装程序单个文件是一个不可能的梦想。

在 Linux 上,您可以考虑使用binfmt_miscshar

阅读Levine 的Linkers and Loaders书,以及elf(5) & execve(2) Linux 手册页。

于 2013-07-31T13:18:25.503 回答