Tengo exactamente el mismo problema que tú durante años también.
Para usos simples no interactivos, me gusta usar el editor de bloques binarios BBE . BBE es binario como SED es texto, incluida su sintaxis arcaica y simplicidad, sin embargo, tiene muchas características que faltan de lo que a menudo necesito, por lo que tengo que combinarlo con otras herramientas. Entonces, BBE es solo una solución parcial. También tenga en cuenta que BBE no ha tenido actualizaciones o mejoras durante años.
Por supuesto, uno puede usar xxd
antes y xxd -r
después de editar los datos con herramientas basadas en texto, pero eso no funcionará cuando los datos en cuestión sean grandes y se requiera acceso aleatorio, por ejemplo, al procesar dispositivos de bloque.
(Nota: para Windows, existe al menos el costoso y patentado lenguaje de scripts WinHex, pero eso no nos llevará a ningún lado).
Para una edición binaria más complicada, generalmente recurro también a Python, aunque a veces es demasiado lento para archivos grandes, que es su principal inconveniente. Espero que Pyston (Python que emplee LLVM para compilar un código de máquina optimizado) algún día madure lo suficiente como para ser utilizable, o incluso mejor, alguien diseñará e implementará un lenguaje de secuencias de comandos de procesamiento binario compacto, rápido y versátil gratuito, para el cual AFAIK no existe U * IX como sistemas todavía.
ACTUALIZAR
También uso el ensamblador plano de ensamblaje Intel x86 de código abierto , o fasm para abreviar, que evolucionó en mucho más que un ensamblador.
Tiene un potente preprocesador de macro basado en bloques de texto (en sí mismo un lenguaje completo) con una sintaxis en la tradición del lenguaje macro de ensamblador turbo de Borland, pero mucho más avanzado.
Además, tiene un lenguaje de manipulación de datos, que permite que los archivos binarios incluyan archivos arbitrarios, realice todo tipo de manipulación binaria y aritmética (solo entero) en "tiempo de compilación" y escriba el resultado en un archivo de salida. Este lenguaje de manipulación de datos tiene estructuras de control y también se está completando.
Es mucho más fácil de usar que escribir un programa que realice alguna manipulación binaria en C y probablemente incluso en Python. Además, se carga deslumbrantemente rápido, ya que es un ejecutable de tamaño pequeño con casi ninguna dependencia externa (hay 2 versiones: o solo requiere libc o puede ejecutarse como un ejecutable estático directamente en el kernel de Linux ABI).
Tiene algunos bordes ruff, como
no es compatible con la concurrencia
al escribir en un ensamblado x86 de 32 bits (aunque funciona en x86_64), probablemente necesite qemu o un emulador similar si desea ejecutarlo en cualquier otra cosa que no sea x86 o x86_64
su potente lenguaje de preprocesador de macros se está completando, esto significa que es mejor que tenga experiencia con lenguajes como Lisp, Haskell, XSLT, o probablemente M4 sería la mejor opción.
Todos los datos que se escribirán en el archivo de salida se realizan en un búfer "plano" en la memoria, y este búfer puede crecer pero no reducirse hasta que el archivo de salida se haya escrito y finalizado fasm. Esto significa que solo se pueden generar archivos como máximo, ya que le queda memoria principal en una sola ejecución de fasm.
los datos solo se pueden escribir en un único archivo de salida para cada ejecución de fasm
Sí, es homebrew, aunque es realmente genial e inteligente
chain = ls["-a"] | grep["-v", "\\.py"] | wc["-l"]; chain()
¿lo has visto?perl
'sunpack
(ᵔᴥᵔ)