J'essaie de trouver deux octets à l'intérieur du fichier binaire, puis d'augmenter la valeur de ces deux octets et de les remplacer à l'intérieur du fichier. Ces deux octets sont sur les positions 0x82-0x83. Pour l'instant, j'ai réussi à extraire ces deux octets en utilisant ceci:
#!/usr/bin/env bash
BYTES=$(tail -c +131 "$1" | head -c 2)
Ces octets ont une valeur: 1B 1F
. Je suis coincé avec:
- Comment convertir des octets en entier? Il doit être
6943
décimal. - Comment ajouter / faire écho des données binaires dans un fichier
- Comment écrire des octets accrus à l'intérieur du fichier sur les positions 0x82-0x83. Je pourrais utiliser
head -c 130 original.bin >> new_file.bin && magic_command_writing_bytes_to_file >> new_file.bin && tail -c +133 original.bin
, mais il doit y avoir une meilleure façon.
Je pourrais faire ça en PHP, ça devrait être plus facile, mais je suis intéressé par comment faire ça en bash.
text-processing
conversion
replace
binary
piotrekkr
la source
la source
\x
- à la ligne deux de votre exemple de code. Ça devrait l'êtreecho -n $'\x1b\x1f' >> test.txt
.printf "%d" 0x1B1F
fera le travail très bien pour obtenir votre6943
résultat; à partir de cela, vous pouvez utiliser une ligne beaucoup plus intelligente comme à laprintf "%d" $(xxd -u -ps -l 2 -s 12 test.txt)
place et vous n'en aurez plus besoinbc
.Oh pardon. Cette réponse est obsolète, car je pensais que vous avez des valeurs hexadécimales écrites en ascii dans votre fichier.
Vous pouvez convertir les nombres hexadécimaux en système décimal via
printf "%d" 0x1B1F
.Si vous avez enregistré les octets dans une variable,
BYTES=1B1F
vous obtenez le résultat avecprintf "%d" 0x$BYTES
.Donc, si vous voulez augmenter le nombre,
Puis reconvertissez-le
la source