Ho lo stesso identico problema di te da anni.
Per semplici usi non interattivi, mi piace usare l'editor di blocchi binari BBE . BBE sta al binario come SED al testo, compresa la sua sintassi arcaica e semplicità, tuttavia, ha molte caratteristiche mancanti da ciò di cui ho spesso bisogno, quindi devo combinarlo con altri strumenti. Quindi, BBE è solo una soluzione parziale. Si noti inoltre che BBE non ha avuto aggiornamenti o miglioramenti per anni.
Naturalmente è possibile utilizzare xxd
prima e xxd -r
dopo la modifica dei dati con strumenti basati su testo, ma ciò non funzionerà quando i dati in questione sono di grandi dimensioni e è richiesto un accesso casuale, ad esempio durante l'elaborazione di dispositivi a blocchi.
(Nota: per Windows esiste almeno il linguaggio di scripting WinHex costoso e proprietario, ma non ci porterà da nessuna parte.)
Per un editing binario più complicato, di solito ricado anche su Python, anche se a volte è troppo lento per file di grandi dimensioni, che è il principale svantaggio. Spero che Pyston (Python che impiega LLVM per compilare in codice macchina ottimizzato) un giorno diventerà abbastanza maturo per essere utilizzabile, o ancora meglio, qualcuno progetterà e implementerà un linguaggio di scripting di elaborazione binaria compatto, veloce e versatile gratuito, per il quale AFAIK non esiste U * IX gradisce ancora i sistemi.
AGGIORNARE
Mi capita anche di usare l'assemblatore flat home assembler Intel x86 open source o il fasm in breve, che si è evoluto in molto più di un semplice assemblatore.
Ha un potente preprocessore macro basato su blocco di testo (a sua volta un linguaggio completo turing) con una sintassi nella tradizione del linguaggio macro dell'assemblatore turbo borlandico, ma molto più avanzato.
Inoltre, ha un linguaggio di manipolazione dei dati, che consente di includere binari file arbitrari, eseguire tutti i tipi di manipolazione binaria e aritmetica (solo intero) in "fase di compilazione" e scrivere il risultato in un file di output. Questo linguaggio di manipolazione dei dati ha strutture di controllo ed è anche in fase di completamento.
È molto più facile da usare rispetto alla scrittura di un programma che esegue alcune manipolazioni binarie in C e probabilmente anche in Python. Inoltre, si carica in modo accecante, poiché è un eseguibile di piccole dimensioni con quasi nessuna dipendenza esterna (ci sono 2 versioni: o richiede solo libc o può essere eseguito come eseguibile statico direttamente sull'ABI del kernel di Linux).
Ha alcuni bordi ruff, come
non supporta la concorrenza
in fase di scrittura in assembly x86 a 32 bit (funziona su x86_64), probabilmente hai bisogno di qemu o di un emulatore simile se vuoi eseguirlo su qualcosa di diverso da x86 o x86_64
il suo potente linguaggio di preprocessore è in fase di completamento, ciò significa che è meglio avere qualche esperienza con linguaggi come Lisp, Haskell, XSLT o probabilmente M4 sarebbe la scelta migliore.
tutti i dati che devono essere scritti nel file di output vengono eseguiti in un buffer "flat" in memoria e questo buffer può crescere ma non ridursi fino a quando il file di output non è stato scritto e il fasm è stato terminato. Ciò significa che si possono generare file al massimo delle dimensioni della memoria principale rimasta in una sola corsa di fasm.
i dati possono essere scritti in un unico file di output per ogni serie di fasm
sì, è homebrew, comunque molto pulito e intelligente
chain = ls["-a"] | grep["-v", "\\.py"] | wc["-l"]; chain()
hai visto?