# Patch Binaire

Les patchs binaires sont utilisés pour corriger des fichiers ou des programmes sur un appareil. Ils effectuent une recherche et un remplacement à l'aide de caractères génériques hexadécimaux. La correspondance partielle d'octets est prise en charge : par exemple, `??` représente n'importe quel octet, et `B?` représente n'importe quel octet commençant par `B` (comme `BA`, `B1`, `B9`). Ainsi, les caractères génériques `49` `BA` `??` `?C` correspondront à n'importe quel segment du fichier qui correspond au motif `49` `BA` `..` `.C`. L'appel suivant remplacera toutes les occurrences de la séquence d'octets `AA` `BB` `CC` `D[0-9A-F]` par `AA` `BB` `CC` `DD` dans le fichier `test.bin`. L'interface retournera le nombre de remplacements effectués ainsi que leurs offsets.

```python
d.hex_patch("AA BB CC D?", "AA BB CC DD", "/data/test.bin")
```

```python
>>> result = d.hex_patch("AA BB CC D?", "AA BB CC DD", "/data/test.bin")
>>> print (result.count)
1
>>> print (result.replaces[0].offset)
8123
```

```{note}
La démonstration ne montre qu'une correspondance et un remplacement de quatre octets, mais l'interface prend en charge des séquences de n'importe quelle longueur, à condition que le motif de recherche contienne au moins deux caractères hexadécimaux valides.
```

Pour limiter le nombre maximal de remplacements, utilisez le paramètre `maxreplace`. Par défaut, toutes les correspondances sont remplacées.

```python
d.hex_patch("AA BB CC D?", "AA BB CC DD", "/data/test.bin", maxreplace=2)
```

Il existe également un mode de simulation (`dryrun`), qui se contente de rechercher les correspondances dans le fichier sans effectuer de remplacement.

```python
d.hex_patch("AA BB ?? ??", "AA BB 00 00", "/data/test.bin", dryrun=True)
```

```{hint}
Le chemin du fichier prend en charge les caractères génériques de type glob. Par exemple, `/data/app/*/test.bin` recherchera le fichier `test.bin` dans n'importe quel sous-répertoire direct du répertoire `/data/app`.
```