1

私には、これはミッション・インポッシブルのように聞こえますが、私よりも多くのことを知っている人がいるので、チャンスがあるかもしれないと思いました :)

WindowsとLinuxの両方で実行される1つのファイルが必要です。

基本的に、プログラムは 2 つの部分から作成できます。
パート 1 は、Windows で実行できる Windows 実行可能ファイルです。
パート 2 は、Linux で実行できる Linux シェル スクリプトです。

LinuxがWindowsバイナリ実行可能ファイルのバイトを無視し、バイナリWindows実行可能ファイルにテキストとして追加されたシェルスクリプトを実行できるような方法でファイルを構築する方法はありますか?

Windows exeの前にバイトを追加しようとしましたが、もちろんWindowsはファイルを認識できません。ええ、実行可能ファイルのバイトの前に何も置くことはできませんが、ファイルの最後に追加することはできます。

次に、Linuxでプレーンスクリプトを使用しました

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

スクリプトの前にテキストを追加しました。存在しないコマンドについて不平を言うだけでしたが、ファイルを実行し続け、「hello world」テキストが出力されました。

これら2つのことをまとめて(cat runLinuxPart.sh >> myMix.exechmod +x myMix.exe実行してから、次のようになりますThe entry point method could not be loaded:(

Linux シェル ファイルは一種の自己抽出インストーラーです。最後に.tar、前にスクリプトを保持しているため、Linuxで.shを実行すると、.tarが取得され、抽出され、必要なすべてが実行されます。

Windows exe の目的は、リモートの Linux マシンに接続し、それ自体から .sh ファイルを抽出して Linux にアップロードし、実行することです。

単一の自己インストーラー ファイルをユーザーに提供したいと考えています。

これが私の夢であることが不可能である場合、もちろん、2 つの個別のインストーラーでも問題ありません。

4

1 に答える 1

2

Linux シェル スクリプトは#!. Linux ELF実行可能ファイルは、\x7FELF. Windows 実行可能ファイルがこれらのバイトで開始できない場合、あなたの夢は実現できません。PE (Windows 実行可能ファイルのバイナリ形式) はこれらで開始できないと思います (しかし、よくわかりません) 。したがって、ユニバーサル インストーラーの単一ファイルは不可能な夢です。

Linux では、 binfmt_miscまたはsharで遊ぶことを検討できます。

Levine のLinkers and Loaders book とelf(5) & execve(2) Linux man ページを読んでください。

于 2013-07-31T13:18:25.503 に答える