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 und xxd -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
chain = ls["-a"] | grep["-v", "\\.py"] | wc["-l"]; chain()
Haben Sie sich das angesehen?