> For the complete documentation index, see [llms.txt](https://sansong.gitbook.io/cyber/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sansong.gitbook.io/cyber/rev/outils/gdb/hooks.md).

# Hooks

## Appels systèmes

On peut placer des hooks sur des appels systèmes spécifiques avec `catch syscall`.

```
gef➤  catch syscall <syscall>
Catchpoint 1 (syscall '<syscall>' [syscall number])
```

Les arguments peuvent être filtrés avec `condition`.

```
gef➤  condition 1 $rdi == <value> && ...
```

Exemple pour hook l'appel `write` avec l'argument `"hello"`.

```
gef➤  catch syscall write
Catchpoint 1 (syscall 'write' [1])
gef➤  condition 1 *(char *)$rsi == 'hello' && $rdx == 5
gef➤  r
```

{% hint style="success" %}
Dans le cas où une erreur indiquant que le programme doit utiliser `malloc` apparait il faut préciser les lettres une par une:

```
gef➤  condition 1 *(char *)$rsi == 'h' && *((char *)$rsi + 1) == 'e' && *((char *)$rsi + 2) == 'l' && *((char *)$rsi + 3) == 'l' && *((char *)$rsi + 4) == 'o' && $rdx == 5
```

{% endhint %}

### Suppression

Les `catchpoints` sont considérés comme des `breakpoints`. Ils sont listés ensembles.

```
gef➤  info breakpoints
```

On les supprime de la même manière.

```
gef➤  del <catchpoint id>
```
