GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Möglichkeit zum Einbetten einer ausführbaren Binärdatei in ein Shell-Skript ohne zusätzliche Tools?

Ich suche nach einer Möglichkeit, eine ausführbare Binärdatei fest in ein Skript zu integrieren. Etwa so:

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

Ich habe diese Lösung gefunden, die uuencode verwendet und ist gut. Aber es hängt von shrutils ab , die ein Extra zu sein scheinen, da sie nicht standardmäßig in meinem Debian enthalten sind.

Ich habe darüber nachgedacht, die Binärdatei mit base64 codieren zu lassen und dann entschlüsseln und irgendwie ausführen, möglicherweise ohne temporäre Dateien zu erstellen. Ich erinnere mich, dass es eine Bibliothek gab, die für die Ausführung von Dingen verantwortlich war, aber ich habe vergessen, was das war.

Es könnte das Beste sein, ein so einfaches Konstrukt wie dieses auszuführen:

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

Akzeptierte Antwort:

Wie wäre es mit:

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

Wenn Sie keine Binärdaten im Skript haben möchten, können Sie sie codieren und cat ersetzen durch den zugehörigen Decoder.

Beachten Sie, dass Sie +9 ersetzen müssen durch die Zeilennummer, in der die Binärdatei beginnt, falls Sie das Skript auf eine andere Länge ändern.

Wenn Ihr tail Implementierung unterstützt das Argument +9 nicht , versuchen Sie -n +9 stattdessen.

Wenn Sie befürchten, eine vorhandene /tmp-Datei zu beschädigen, versuchen Sie, mktemp(1) zu verwenden um den tmp-Dateinamen zu erstellen.

Beachten Sie, dass diese Methode von den Upgrade-Skripten für SunPro verwendet wurde Compiler-Suite, die das komprimierte tar-Archiv mit dem gesamten Upgrade und etwas Shell-Code enthielt, um die Handhabung darum herum zu verwalten.


Linux
  1. Shell im Script zur Laufzeit ermitteln?

  2. Bestimmen des Pfads zum bezogenen Shell-Skript?

  3. Möglichkeit, ein Shell-Skript immer als Root auszuführen?

  4. Einzeiler vs. Drehbuch?

  5. Wie disassembliere ich eine ausführbare Binärdatei unter Linux, um den Assemblercode zu erhalten?

Die Bedeutung von $? In einem Shell-Skript?

Aktuelles Verzeichnis des Shell-Skripts?

Wie führe ich Code in der Django-Shell durch ein externes Python-Skript aus?

Binärdatei kann nicht ausgeführt werden, wenn versucht wird, ein Shell-Skript unter Linux auszuführen

So führen Sie eine Datei ohne die Erweiterung .sh in der Shell aus

Kann ein Shell-Skript darauf warten, dass sich eine Datei ändert, und Maßnahmen ergreifen?