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

Eine Shell-ähnliche Umgebung für die Binärverarbeitung?

Diese Frage kam mir schon ein paar Mal, jetzt als Antwort auf die Frage
Binäre Datenblöcke von stdin in Bash durchlaufen
Antworten gegeben in https://stackoverflow.com/questions/993434/what -language-is-to-binary-as-perl-is-to-text waren ebenfalls nicht zufriedenstellend.

Ich suche nach einer Skriptumgebung, die speziell für die Verarbeitung von E/A mit Binärdateien geeignet ist. Ich weiß, dass ich eine der vollwertigen Programmiersprachen (c/Python/…) verwenden kann, aber sie haben einen enormen Initialisierungs- und Codierungsaufwand (Zuweisung und fread/fwrite in c, Bitstrings in Python…), ganz zu schweigen davon, dass sie weniger geeignet sind für Scripting (Aufruf anderer Anwendungen daraus). Perl ist mit seinem unpack nicht besser Funktionen, String-orientierte Bedienung und alberne Syntax.

Etwas wie od , sondern als Sprache.

Was ich erwarte:

  1. Endianness mit einem einzigen Schalter/Befehl einstellen oder ändern.
  2. einfache Spezifikation des angeforderten Typs (etwas wie das Erweitern von bash read var mit int32 var , float var usw.).
  3. Handhabung von Binärdaten durch Pipes, Überspringen der angegebenen Anzahl von Bytes.
  4. Standard-Skript-Flusskontrolle (for/if/…), an die wir gewöhnt sind.

Ich möchte Rohdaten (Fotografie, wissenschaftliche Daten, unbekannte und schlecht dokumentierte Formate) mit der gleichen Leichtigkeit und Einsicht verarbeiten, die Sie bei der Inspektion von ASCII-Dateien erhalten. Ich verwende c jetzt, aber es ist nicht optimal für Ad-hoc-Skripting und kann nicht interaktiv sein.

Kennt jemand so ein Tool? Bitte keine klickige GUI-Software, sie muss über ssh, von anderen Skripten und so weiter funktionieren. „Gibt es nicht“ ist eine akzeptable, aber deprimierende Antwort.

Akzeptierte Antwort:

Ich habe auch seit Jahren genau das gleiche Problem wie du.

Für einfache, nicht interaktive Anwendungen verwende ich gerne den binären Blockeditor BBE.
BBE ist zu binär wie SED zu Text, einschließlich seiner archaischen Syntax und Einfachheit, aber es fehlen viele Funktionen gegenüber dem, was ich oft brauche, also muss ich es mit anderen Werkzeugen kombinieren. BBE ist also nur eine Teillösung.
Beachten Sie auch, dass BBE seit Jahren keine Updates oder Verbesserungen mehr hat.

Natürlich kann man xxd verwenden davor und xxd -r nach der Bearbeitung der Daten mit textbasierten Tools, aber das funktioniert nicht, wenn die fraglichen Daten groß sind und ein wahlfreier Zugriff erforderlich ist, beispielsweise bei der Verarbeitung von Blockgeräten.

(Hinweis:Für Windows gibt es zumindest die teure, proprietäre Skriptsprache WinHex, aber das bringt uns nicht weiter.)

Für kompliziertere binäre Bearbeitungen greife ich normalerweise auch auf Python zurück, obwohl es manchmal für große Dateien zu langsam ist, was sein Hauptnachteil ist. Ich hoffe, dass Pyston (Python, das LLVM verwendet, um zu optimiertem Maschinencode zu kompilieren) eines Tages reif genug ist, um verwendbar zu sein, oder noch besser, jemand wird eine kostenlose, kompakte, schnelle und vielseitige Skriptsprache für die binäre Verarbeitung entwerfen und implementieren, für die es AFAIK nicht gibt U*IX mag noch Systeme.

Verwandte:Nachkommen verarbeiten?

AKTUALISIEREN

Ich verwende zufällig auch den Homebrew, Open Source Intel x86 Assembler Flat Assembler oder kurz fasm, der sich zu viel mehr als nur einem Assembler entwickelt hat.

Es hat einen mächtigen, Textblock-basierten Makro-Präprozessor (selbst eine sich entwickelnde vollständige Sprache) mit einer Syntax in der Tradition der Borland-Turbo-Assembler-Makrosprache, aber viel fortschrittlicher.

Außerdem verfügt es über eine Datenmanipulationssprache, die es ermöglicht, beliebige Dateien binär einzubinden, alle Arten von binären und arithmetischen Manipulationen (nur Ganzzahlen) zur „Kompilierzeit“ durchzuführen und das Ergebnis in eine Ausgabedatei zu schreiben. Diese Datenmanipulationssprache hat Kontrollstrukturen und ist auch noch komplett.

Es ist viel einfacher zu verwenden, als ein Programm zu schreiben, das einige binäre Manipulationen in C und wahrscheinlich sogar in Python durchführt. Außerdem wird es unglaublich schnell geladen, da es eine kleine ausführbare Datei mit fast keinen externen Abhängigkeiten ist (es gibt 2 Versionen:entweder benötigt es nur libc oder es kann als statische ausführbare Datei direkt auf der Linux-Kernel-ABI ausgeführt werden).

Es hat einige Krausenkanten, wie

  1. unterstützt keine Parallelität

  2. Da Sie in 32-Bit-x86-Assembly schreiben (funktioniert jedoch auf x86_64), benötigen Sie wahrscheinlich qemu oder einen ähnlichen Emulator, wenn Sie es auf etwas anderem als x86 oder x86_64 ausführen möchten

  3. Die leistungsstarke Makro-Präprozessorsprache wird vollständig, das bedeutet, dass Sie besser etwas Erfahrung mit Sprachen wie Lisp, Haskell, XSLT haben sollten, oder wahrscheinlich wäre M4 die beste Wahl.

  4. Alle Daten, die in die Ausgabedatei geschrieben werden sollen, werden in einem „flachen“ Puffer im Speicher ausgeführt, und dieser Puffer kann wachsen, aber nicht schrumpfen, bis die Ausgabedatei geschrieben und fasm beendet wurde. Das bedeutet, dass man bei einem einzigen Durchlauf von fasm höchstens Dateien erzeugen kann, die maximal so groß sind, wie Hauptspeicher übrig ist.

  5. Daten können für jeden Lauf von fasm nur in eine einzige Ausgabedatei geschrieben werden

  6. Ja, es ist Homebrew, aber ein wirklich nettes und cleveres.


Linux
  1. MySQL – Konvertieren in Tabellendaten für InnoDB

  2. RAID für diejenigen, die es vermeiden

  3. Linux – Permanente Umgebungsvariable für alle Benutzer?

  4. Pseudodateien für temporäre Daten?

  5. Werkzeug zum Modifizieren des dynamischen Abschnitts einer ELF-Binärdatei

Wo sollten Umgebungsvariablen für Jenkins festgelegt werden?

Was ist eine verteilte Datenbank und wozu dienen verteilte Datensysteme?

So installieren Sie Anaconda unter Linux für Data Science Wins!

Die 20 besten Data-Mining-Software für Linux-Desktop

Die 10 besten KDE-Plasma-Widgets für die KDE-Desktopumgebung

Die 15 besten Komprimierungs- oder Archivmanager für Linux-Systeme