# 二進位補丁

二進位補丁用於對裝置上的檔案或程式進行修補。使用十六進位萬用字元進行尋找與取代，支援高低位元萬用字元，例如 `??` 代表任意一個位元組，`B?` 代表任意以 `B` 開頭的位元組，如 `BA` `B1` `B9`。例如萬用字元 `49` `BA` `??` `?C` 將會匹配檔案中任何符合 `49` `BA` `..` `.C` 格式的段落。以下呼叫將會把 test.bin 中的所有 `AA` `BB` `CC` `D[0-9A-F]` 位元組取代為 `AA` `BB` `CC` `DD`，此介面會回傳取代的數量以及取代的偏移量。

```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}
範例中僅示範了四個位元組的匹配與取代，此介面支援任意多位元組的匹配與取代，但至少需要兩位有效的匹配數。
```

若要限制最大取代數量，可透過 `maxreplace` 參數進行設定，預設為全部取代。

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

還有測試模式，此模式只會在檔案中為您尋找匹配的位置，而不會執行取代操作。

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

```{hint}
檔案路徑支援使用萬用字元匹配（glob）。例如 `/data/app/*/test.bin` 將會尋找並匹配 `/data/app` 目錄下任何一層目錄中的 `test.bin` 檔案。
```