Diese Frage kam mir einige Male zuvor, jetzt als Antwort auf die Frage Durchschleifen von Binärdatenblöcken von stdin in Bash Answers unter /programming/993434/what-language-is-to-binary -as-perl-is-to-text waren auch 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 Sie eignen sich weniger für Skripterstellung (Aufrufen anderer Anwendungen). Perl ist nicht besser mit seinen unpack
Funktionen, seiner stringorientierten Bedienung und seiner doofen Syntax.
Sowas od
, aber als Sprache.
Was ich erwarte:
- Endianness mit einem einzigen Schalter / Befehl einstellen oder ändern.
- einfache Angabe des angeforderten Typs (so etwas wie bash Verlängerung
read var
mitint32 var
,float var
etc.). - Behandlung von Binär-Through-Pipes, Überspringen der angegebenen Anzahl von Bytes.
- Standard-Scripting-Ablaufsteuerung (für / 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 beim Überprüfen von ASCII-Dateien erhalten. Ich verwende c
jetzt, aber es ist nicht optimal für Ad-hoc-Skripte und kann nicht interaktiv sein.
Kennt jemand ein solches Tool? Keine klickende GUI-Software, bitte, es muss über ssh, von anderen Skripten usw. funktionieren. "Existiert nicht" ist eine akzeptable, aber deprimierende Antwort.
chain = ls["-a"] | grep["-v", "\\.py"] | wc["-l"]; chain()
Haben Sie sich das angesehen?perl
'sunpack
(ᵔᴥᵔ)Antworten:
Ich habe seit Jahren genau dasselbe Problem wie Sie.
Für einfache nicht interaktive Anwendungen verwende ich gerne den Binärblockeditor BBE . BBE ist zu binär wie SED zu Text, einschließlich seiner archaischen Syntax und Einfachheit. Es fehlen jedoch viele Funktionen, die ich oft benötige, sodass ich sie mit anderen Tools kombinieren muss. BBE ist also nur eine Teillösung. Beachten Sie auch, dass BBE seit Jahren keine Updates oder Verbesserungen mehr hat.
Natürlich kann man die Daten
xxd
vor undxxd -r
nach dem Bearbeiten mit textbasierten Werkzeugen verwenden, aber das funktioniert nicht, wenn die fraglichen Daten groß sind und ein wahlfreier Zugriff erforderlich ist, beispielsweise beim Verarbeiten von Blockgeräten.(Hinweis: Für Windows gibt es mindestens die teure, proprietäre WinHex-Skriptsprache, die uns jedoch nicht weiterbringt.)
Für kompliziertere binäre Bearbeitungen greife ich normalerweise auch auf Python zurück, obwohl es für große Dateien manchmal zu langsam ist, was der Hauptnachteil ist. Ich hoffe, Pyston (Python, das LLVM zum Kompilieren von optimiertem Maschinencode verwendet) wird eines Tages ausgereift genug sein, um verwendet werden zu können, oder noch besser, jemand wird eine kostenlose kompakte, schnelle und vielseitige Skriptsprache für die binäre Verarbeitung entwerfen und implementieren, für die AFAIK nicht existiert U * IX-ähnliche Systeme.
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 verfügt über einen leistungsstarken Textblock-basierten Makro-Präprozessor (selbst eine aufregende vollständige Sprache) mit einer Syntax in der Tradition der Borland Turbo Assembler-Makrosprache, die jedoch wesentlich weiter fortgeschritten ist.
Außerdem verfügt es über eine Datenbearbeitungssprache, die es ermöglicht, beliebige Dateien binär einzuschließen, alle Arten von binären und arithmetischen Manipulationen (nur Ganzzahlen) zur "Kompilierungszeit" durchzuführen und das Ergebnis in eine Ausgabedatei zu schreiben. Diese Datenbearbeitungssprache hat Kontrollstrukturen und ist auch vollständig.
Es ist viel einfacher zu benutzen, als ein Programm zu schreiben, das eine binäre Manipulation in C und wahrscheinlich sogar in Python ausführt. Außerdem wird es unglaublich schnell geladen, da es sich um eine kleine ausführbare Datei handelt, die fast keine externen Abhängigkeiten aufweist (Es gibt zwei Versionen: Entweder wird nur libc benötigt, oder es kann als statische ausführbare Datei direkt auf dem Linux-Kernel ABI ausgeführt werden).
Es hat einige Rüschenkanten, wie
Parallelität wird nicht unterstützt
Wenn Sie in einer 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
Die leistungsstarke Makro-Präprozessorsprache ist vollständig. Das bedeutet, Sie sollten Erfahrung mit Sprachen wie Lisp, Haskell, XSLT oder wahrscheinlich M4 haben.
Alle Daten, die in die Ausgabedatei geschrieben werden sollen, werden in einem "flachen" Puffer im Speicher abgelegt, und dieser Puffer kann wachsen, aber nicht schrumpfen, bis die Ausgabedatei geschrieben und fasm beendet wurde. Dies bedeutet, dass man nur Dateien erzeugen kann, die höchstens so groß sind, wie Sie in einem einzigen Durchlauf von fasm Hauptspeicher übrig haben.
Daten können nur in eine einzige Ausgabedatei für jeden Durchlauf von fasm geschrieben werden
Ja, es ist Homebrew, eine wirklich nette und clevere
quelle
Sie müssen nicht unbedingt mit Perls Entpacken "Frieden schließen" ... eines der großartigen Dinge an Perl ist, wie Sie die Parser- und Symboltabelle missbrauchen können, um Ihre eigene Sprache in einem benutzerdefinierten Paket zu erstellen.
Ist das im Grunde das, wonach du suchst?
Die Übung besteht dann darin, genug Perl zu lernen, um das MyBinLib-Paket zu schreiben. Fragen Sie in einem Perl-Forum nach und die Leute würden sich wahrscheinlich freuen, Ihnen zu helfen.
quelle
Sind Sie auf
beav
Makros gestoßen, aber ich konnte keine Skripte finden,apt-cache show beav
Extrakt :Dann gibt es
xxd
welche, die in den / aus dem binären / ASCII-Anzeigemodus konvertieren und mitsed
oder kombiniert werden könnenvi
, aber nicht über die Funktion zum Austauschen von Bytes verfügen.quelle
Sie können sich immer für das Gold entscheiden und in C oder ASM einsteigen. Wenn Sie mit rohen Binärdateien arbeiten, hüpfen Sie sie einfach direkt aus dem Register. Du bist schon da'.
quelle