Estou tentando encontrar dois bytes dentro do arquivo binário, aumente o valor desses dois bytes e os substitua dentro do arquivo. Esses dois bytes estão nas posições 0x82-0x83. Por enquanto, extraí com êxito esses dois bytes usando este:
#!/usr/bin/env bash
BYTES=$(tail -c +131 "$1" | head -c 2)
Esses bytes têm valor: 1B 1F
. Estou preso com:
- Como converter bytes em número inteiro? Deve ser
6943
decimal. - Como acrescentar / ecoar dados binários no arquivo
- Como escrever bytes aumentados dentro do arquivo nas posições 0x82-0x83. Eu poderia usar
head -c 130 original.bin >> new_file.bin && magic_command_writing_bytes_to_file >> new_file.bin && tail -c +133 original.bin
, mas deve haver uma maneira melhor.
Eu poderia fazer isso no PHP, deveria ser mais fácil, mas estou interessado em fazer isso no bash.
text-processing
conversion
replace
binary
piotrekkr
fonte
fonte
\x
- na linha dois do seu código de exemplo. Deveria serecho -n $'\x1b\x1f' >> test.txt
.printf "%d" 0x1B1F
fará o trabalho muito bem para obter o6943
resultado; partindo disso, você pode usar uma linha significativamente mais inteligenteprintf "%d" $(xxd -u -ps -l 2 -s 12 test.txt)
e não precisarábc
mais.Oh, desculpe. Esta resposta é obsoleta, porque pensei que você tivesse valores hexadecimais escritos como ascii em seu arquivo.
Você pode converter os números hexadecimais em sistema decimal via
printf "%d" 0x1B1F
.Se você salvou os bytes em uma variável
BYTES=1B1F
, obtém o resultado comprintf "%d" 0x$BYTES
.Então, se você quiser aumentar o número,
Depois converta
fonte