#1 Le 26/02/2018, à 14:16
- lebossejames
[Résolu] Modification fichier binaire
Bonjour,
Je souhaiterais savoir comment effectuer ces opérations à l'aide d'un script shell:
- Suppression des N derniers octets du fichier
- modification de l'octet 15 et 16ième par la valeur 0xABFE
Merci d'avance de votre aide.
Dernière modification par lebossejames (Le 28/02/2018, à 08:33)
Hors ligne
#2 Le 26/02/2018, à 17:01
- pingouinux
Re : [Résolu] Modification fichier binaire
Bonjour,
- Suppression des N derniers octets du fichier
Par exemple, si N=3
head -c -3 fichier1 >fichier2
- modification de l'octet 15 et 16ième par la valeur 0xABFE
Voici une façon de faire
(head -c 14 fichier1; echo -n $'\xAB\xFE'; tail -c +17 fichier1) >fichier2
Édité :
Ou un peu plus simple
(head -c 14; echo -n $'\xAB\xFE'; tail -c +3) <fichier1 >fichier2
Dernière modification par pingouinux (Le 26/02/2018, à 17:05)
Hors ligne
#3 Le 26/02/2018, à 17:13
- Nasman
Re : [Résolu] Modification fichier binaire
A-t-on 0xAB en quinzième position et 0xFE en 16ème ou l'inverse car je suppose que le codage est en little endian et donc que l'octet de poids faible devrait être placé avant l'octet de poids fort ?
PC fixe sous Bionic 64 bits et portable avec Focal 64 bits
Hors ligne
#4 Le 26/02/2018, à 17:15
- pingouinux
Re : [Résolu] Modification fichier binaire
On peut aussi faire
(dd bs=1 count=14; echo -n $'\xAB\xFE'; dd bs=1 skip=2) <fichier1 >fichier2
en tenant compte éventuellement de la remarque de Nasman #3.
Hors ligne
#5 Le 27/02/2018, à 07:46
- credenhill
Re : [Résolu] Modification fichier binaire
hello
N=...
xxd -p -c 1 -l $(($(stat -c %s bin1)-$N)) bin1 | sed '15s/../AB/; 16s/../FE/' | xxd -p -r > bin2
Dernière modification par credenhill (Le 27/02/2018, à 07:50)
Hors ligne
#6 Le 27/02/2018, à 10:23
- lebossejames
Re : [Résolu] Modification fichier binaire
Bonjour,
- Suppression des N derniers octets du fichier
Par exemple, si N=3
head -c -3 fichier1 >fichier2
- modification de l'octet 15 et 16ième par la valeur 0xABFE
Voici une façon de faire
(head -c 14 fichier1; echo -n $'\xAB\xFE'; tail -c +17 fichier1) >fichier2
Édité :
Ou un peu plus simple(head -c 14; echo -n $'\xAB\xFE'; tail -c +3) <fichier1 >fichier2
Si je souhaite supprimer les 4 premier octets puis modifier le 14ième octet par 0xAB et supprimer les 156 dernier octets.
Je dois faire:
(head -c 4 fichier1;head -c 14 fichier1; echo -n $'\xAB'; tail -c +156 fichier1) >fichier2
??
Merci d'avance.
Hors ligne
#7 Le 27/02/2018, à 11:44
- pingouinux
Re : [Résolu] Modification fichier binaire
Si je souhaite supprimer les 4 premier octets puis modifier le 14ième octet par 0xAB et supprimer les 156 dernier octets.
Si l'octet que tu modifies est le 14ème du fichier d'origine
(dd bs=1 skip=4 count=9; echo -n $'\xAB'; dd bs=1 skip=1 | head -c -156) <fichier1 >fichier2
Ajouté :
Avec ta commande
(head -c 4 fichier1;head -c 14 fichier1; echo -n $'\xAB'; tail -c +156 fichier1) >fichier2
le fichier de sortie contiendrait :
- les 4 premiers octets de fichier1
- les 14 premiers octets de fichier1 (y compris les 4 précédents)
- 0xAB
- la fin de fichier1 à partir du 156ème octet
Ajouté (2) :
Tu aurais pu faire ceci
(head -c 4 >/dev/null; head -c 9 ;echo -n $'\xAB'; tail -c +2 | head -c -156) <fichier1 >fichier2
Dernière modification par pingouinux (Le 27/02/2018, à 13:59)
Hors ligne
#8 Le 28/02/2018, à 08:33
- lebossejames
Re : [Résolu] Modification fichier binaire
Merci c'est résolu.
Hors ligne