GNU/Linux >> Linux の 問題 >  >> Linux

追加のツールを使用せずに実行可能バイナリをシェルスクリプトに埋め込む方法は?

実行可能バイナリをスクリプトにハードワイヤードする方法を探しています。このようなもの:

#!/bin/bash
...some shell code
execute binary:
    >>>
        binary
        code
        ...
    <<<
...some more shell code possibly

uuencodeを使用するこのソリューションを見つけました そして良いです。しかし、それはshrutilsに依存します 、これは私のDebianにデフォルトで含まれていないので、余分なようです。

バイナリをbase64でエンコードすることを考えていました 次にそれをデコードしてどういうわけか おそらく一時ファイルを作成せずに実行します。物事を実行する責任がある図書館があったことを覚えていますが、それが何であったかを忘れていました。

これを実行するのと同じくらい単純な構成にするのが最善かもしれません:

$ <(base64 out | base64 -d)
bash: /dev/fd/63: Permission denied

承認された回答:

どうですか:

unpack() {
    tail +9 "$0" > /tmp/xxx.$$
    chmod +x /tmp/xxx.$$
}
unpack
/tmp/xxx.$$ <add args here>
rm /tmp/xxx.$$
exit
<add the binary here>

スクリプトにバイナリデータを含めたくない場合は、それをエンコードしてcatに置き換えることができます。 関連するデコーダーによる。

+9を置き換える必要があることに注意してください スクリプトを異なる長さに変更した場合に、バイナリが開始する行番号で。

tailの場合 実装は引数+9をサポートしていません 、-n +9を試してください 代わりに。

既存の/tmpファイルを壊すのが怖い場合は、mktemp(1)を使用してみてください。 tmpファイル名を作成します。

このメソッドは、SunProのアップグレードスクリプトで使用されていることに注意してください。 アップグレード全体とその周辺の処理を管理するためのいくつかのシェルコードを含む圧縮されたtarアーカイブを含むコンパイラスイート。


Linux
  1. 実行時にスクリプトでシェルを決定しますか?

  2. $の意味は?シェルスクリプトでは?

  3. Linux でバイナリ実行可能ファイルを逆アセンブルしてアセンブリ コードを取得する方法は?

  1. シェルスクリプトの現在のディレクトリ?

  2. シバン行がなくてもシェルスクリプトは正常に動作しますか?なんで?

  3. 期待されるシェルスクリプトで生成されたプロセスの終了コードを取得するには?

  1. シェルスクリプトでタイムアウトしますか?

  2. bcを使用せずにシェルスクリプトで丸められたパーセンテージを計算する

  3. プログラムコードにバージョン番号をエンコード/埋め込む正しい方法