Esta pregunta me llegó un par de veces antes, ahora en respuesta a la pregunta Bucle a través de fragmentos de datos binarios de stdin en Bash Respuestas dadas en /programming/993434/what-language-is-to-binary -as-perl-is-to-text tampoco fueron satisfactorios.
Estoy buscando un entorno de secuencias de comandos adecuado específicamente para manejar E / S con archivos binarios. Sé que puedo usar uno de los lenguajes de programación completos (c / Python / ...) pero tienen una enorme sobrecarga de inicialización y codificación (asignación y fread / fwrite en c, cadenas de bits en Python ...) sin mencionar son menos adecuados para las secuencias de comandos (llamar a otras aplicaciones desde allí). Perl no es mejor con sus unpack
funciones, operación orientada a cadenas y sintaxis tonta.
Algo así od
, pero como lenguaje.
Lo que espero
- establecer o cambiar endianness con un solo interruptor / comando.
- especificación simple del tipo solicitado (algo así como extender bash
read var
conint32 var
,float var
etc.). - manejo de binarios a través de tuberías, omitiendo el número especificado de bytes.
- control de flujo de secuencias de comandos estándar (para / if / ...) al que estamos acostumbrados.
Me gustaría procesar datos sin procesar (fotografía, datos científicos, formatos desconocidos y mal documentados) con la misma facilidad y visión que obtienes al inspeccionar archivos ASCII. Estoy usando c
ahora, pero no es óptimo para secuencias de comandos ad-hoc, y no puede ser interactivo.
¿Alguien sabe una herramienta como esa? Sin software de interfaz gráfica de usuario clicky, por favor, debe funcionar sobre ssh, desde otros scripts, etc. "No existe" es una respuesta aceptable, pero deprimente.
chain = ls["-a"] | grep["-v", "\\.py"] | wc["-l"]; chain()
¿lo has visto?perl
'sunpack
(ᵔᴥᵔ)Respuestas:
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 yxxd -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
fuente
No necesariamente tiene que "hacer las paces" con el desempaquetado de Perl ... una de las mejores cosas de perl es cómo puede abusar del analizador y la tabla de símbolos para crear su propio idioma, en un paquete personalizado.
¿Es esto básicamente lo que estás buscando?
El ejercicio es aprender suficiente perl para escribir el paquete MyBinLib. Pregunte en un foro de Perl y la gente probablemente estará feliz de ayudar.
fuente
¿Te has encontrado
beav
con macros pero no pude encontrar secuencias de comandos,apt-cache show beav
extracto:Luego está
xxd
qué se convierte a / desde el modo de visualización binario / ascii y podría combinarse consed
ovi
, pero no tiene la función de intercambio de bytes.fuente
Siempre puedes ir por el oro y desplegarte en C o ASM. Si está trabajando con binario sin formato, simplemente bórrelo directamente del registro. Estás 'ya allí'.
fuente