J'ai le même problème que vous depuis des années.
Pour des utilisations simples et non interactives, j'aime utiliser l'éditeur de blocs binaires BBE . BBE est au binaire comme SED au texte, y compris sa syntaxe archaïque et sa simplicité, cependant, il a beaucoup de fonctionnalités manquantes de ce dont j'ai souvent besoin, donc je dois le combiner avec d'autres outils. BBE n'est donc qu'une solution partielle. Notez également que BBE n'a eu aucune mise à jour ou amélioration depuis des années.
Bien sûr, on peut utiliser xxd
avant et xxd -r
après la modification des données avec des outils basés sur du texte, mais cela ne fonctionnera pas lorsque les données en question sont volumineuses et qu'un accès aléatoire est requis, par exemple lors du traitement des blocs de périphériques.
(Remarque: pour Windows, il existe au moins le langage de script WinHex propriétaire et coûteux, mais cela ne nous mènera nulle part.)
Pour les éditions binaires plus compliquées, je retombe généralement sur Python, même s'il est parfois trop lent pour les gros fichiers, ce qui est son principal inconvénient. J'espère Pyston (Python utilisant LLVM pour compiler en code machine optimisé) arrivera un jour à mûrir suffisamment pour être utilisable, ou mieux encore, quelqu'un concevra et implémentera un langage de script de traitement binaire gratuit, compact, rapide et polyvalent, pour lequel AFAIK n'existe pas U * IX comme des systèmes encore.
MISE À JOUR
Il se trouve que j'utilise également l'assembleur plat homebrew, open source Intel x86 assembler , ou fasm pour faire court, qui est devenu bien plus qu'un simple assembleur.
Il possède un puissant préprocesseur de macro basé sur des blocs de texte (lui-même un langage complet) avec une syntaxe dans la tradition du langage de macro du borland turbo assembler, mais beaucoup plus avancé.
En outre, il dispose d'un langage de manipulation de données, qui permet d'inclure des fichiers arbitraires binaires, d'effectuer toutes sortes de manipulations binaires et arithmétiques sur celui-ci (entier uniquement) au "moment de la compilation" et d'écrire le résultat dans un fichier de sortie. Ce langage de manipulation de données a des structures de contrôle et est également complet.
Il est beaucoup plus facile à utiliser que d'écrire un programme qui fait des manipulations binaires en C et probablement même en python. De plus, il se charge à une vitesse aveuglante, car il s'agit d'un exécutable de petite taille sans presque aucune dépendance externe (il existe 2 versions: soit il ne nécessite que libc, soit il peut s'exécuter en tant qu'exécutable statique directement sur le noyau Linux ABI).
Il a des bords de collerette, comme
ne prend pas en charge la simultanéité
étant en écriture dans un assemblage x86 32 bits (fonctionne sur x86_64 cependant), vous avez probablement besoin de qemu ou d'un émulateur similaire si vous voulez l'exécuter sur autre chose que x86 ou x86_64
son puissant langage de préprocesseur de macros est complet, cela signifie que vous feriez mieux d'avoir une certaine expérience avec des langages comme Lisp, Haskell, XSLT, ou probablement M4 serait le meilleur choix.
toutes les données qui doivent être écrites dans le fichier de sortie sont exécutées dans un tampon "plat" en mémoire, et ce tampon peut augmenter mais ne pas rétrécir jusqu'à ce que le fichier de sortie ait été écrit et que fasm soit terminé. Cela signifie que l'on ne peut générer des fichiers au maximum aussi volumineux que la mémoire principale restante dans une seule exécution de fasm.
les données ne peuvent être écrites que dans un seul fichier de sortie pour chaque série de fasm
oui, c'est un homebrew, vraiment très soigné et intelligent
chain = ls["-a"] | grep["-v", "\\.py"] | wc["-l"]; chain()
avez-vous regardé cela?