# Parche Binario

Los parches binarios se utilizan para parchear archivos o programas en el dispositivo. Utiliza comodines hexadecimales para buscar y reemplazar, soportando comodines para los nibbles alto y bajo. Por ejemplo, `??` representa cualquier byte, `B?` representa cualquier byte que comience con `B`, como `BA`, `B1`, `B9`. Así, el comodín `49` `BA` `??` `?C` coincidirá con cualquier segmento en el archivo que se corresponda con `49` `BA` `..` `.C`. La siguiente llamada reemplazará todos los bytes `AA` `BB` `CC` `D[0-9A-F]` en `test.bin` por `AA` `BB` `CC` `DD`, y la interfaz devolverá el número de reemplazos y sus desplazamientos (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}
El ejemplo solo muestra una coincidencia y reemplazo de cuatro bytes, pero la interfaz soporta la coincidencia y reemplazo de cualquier número de bytes, siempre que haya al menos dos caracteres de coincidencia válidos.
```

Para limitar el número máximo de reemplazos, utilice el parámetro `maxreplace`. Por defecto, se reemplazan todas las coincidencias.

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

También hay un modo de prueba, que solo buscará las ubicaciones coincidentes en el archivo sin realizar ninguna operación de reemplazo.

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

```{hint}
La ruta del archivo admite el uso de comodines (glob). Por ejemplo, `/data/app/*/test.bin` buscará y encontrará coincidencias con el archivo `test.bin` en cualquier subdirectorio de primer nivel dentro de `/data/app`.
```