Windows可执行文件里面有linux shell脚本

时间:2013-07-31 13:13:29

标签: linux windows shell

对我来说,这听起来像是不可能的任务,但是有些人比我更了解,所以我想也许我有机会:)

我想有一个文件可以同时在windows和linux上执行。

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

有没有办法以这种方式构建文件,linux可以忽略windows二进制可执行字节,只运行shell脚本,它作为文本附加到二进制窗口可执行文件中?

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

然后,在linux上,我采用了简单的脚本

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

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

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

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

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

我想向用户提供一个自我安装程序文件。

如果这是我的梦想是不可能的,我当然可以选择2个独立的安装人员

1 个答案:

答案 0 :(得分:2)

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

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

阅读Levine's Linkers and Loaders本书,elf(5)& execve(2) Linux手册页。