Estoy tratando de encontrar dos bytes dentro del archivo binario, luego aumentar el valor de esos dos bytes y reemplazarlos dentro del archivo. Esos dos bytes están en las posiciones 0x82-0x83. Por ahora, he extraído con éxito esos dos bytes usando esto:
#!/usr/bin/env bash
BYTES=$(tail -c +131 "$1" | head -c 2)
Estos bytes tienen un valor: 1B 1F
. Estoy atrapado con:
- ¿Cómo convertir bytes a entero? Debería ser
6943
decimal. - Cómo agregar / hacer eco de datos binarios al archivo
- Cómo escribir bytes aumentados dentro del archivo en las posiciones 0x82-0x83. Podría usar
head -c 130 original.bin >> new_file.bin && magic_command_writing_bytes_to_file >> new_file.bin && tail -c +133 original.bin
, pero debe haber una mejor manera.
Podría hacer eso en PHP, debería ser más fácil, pero estoy interesado en cómo hacer esto en bash.
text-processing
conversion
replace
binary
piotrekkr
fuente
fuente
\x
, en la línea dos de su código de ejemplo. Debería serecho -n $'\x1b\x1f' >> test.txt
.printf "%d" 0x1B1F
hará el trabajo bien para obtener tu6943
resultado; a partir de eso, puede usar una línea significativamente más inteligente como en suprintf "%d" $(xxd -u -ps -l 2 -s 12 test.txt)
lugar y ya no la necesitarábc
.Oh, lo siento. Esta respuesta es obsoleta, porque pensé que tenía valores hexadecimales escritos como ascii en su archivo.
Puede convertir los números hexadecimales al sistema decimal a través de
printf "%d" 0x1B1F
.Si ha guardado los bytes en una variable
BYTES=1B1F
, obtendrá el resultado conprintf "%d" 0x$BYTES
.Entonces, si quieres aumentar el número, haz
Luego conviértalo de nuevo
fuente