> 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/les-bases.md).

# Les bases

## Informations

La commande `info` permet de récupérer des informations sur le binaire.

Par exemple pour afficher les adresses des différentes sections:

```
gef➤  info file
Symbols from "/home/sam/bin".
Local exec file:
`/home/sam/bin', file type elf32-i386.
Entry point: 0x80482f0
[...]
0x08049ffc - 0x0804a000 is .got
0x0804a000 - 0x0804a014 is .got.plt
0x0804a014 - 0x0804a01c is .data
0x0804a01c - 0x0804a020 is .bss
```

On peut récupérer l'adresse du point d'entrée du programme. Pour analyser des binaires strippés c'est très pratique car on ne peut pas mettre de breakpoint sur `main` directement.

## Breakpoint

### Création

Les breakpoints peuvent se placer sur des fonctions ou des adresses avec `breakpoint`.

Pour en placer un sur une fonction:

```
gef➤  b main
```

On peut aussi en mettre sur une adresse en ajoutant un astérisque.

```
gef➤  b *0xdeadbeef
```

Si on utilise un offset on doit aussi mettre un astérisque.

```
gef➤  b *<main+4>
```

### Suppression

On les supprime avec `delete`. Chaque breakpoint à un numéro qui sert à l'identifier.

```
gef➤  del <breakpoint id>
```

### Info

On peut les lister avec `info`.

```
gef➤  info breakpoints
```

## Exécution

Le programme se lance avec `r`.

```
gef➤  r
```

Une fois lancé on peut continuer l'exécution jusqu'au prochain breakpoint avec `continue`.

```
gef➤  c
```

Pour lancer le programme et placer automatiquement un breakpoint sur main on utilise `start`.

```
gef➤  start
```

## Désassemblage

Si le binaire contient des symboles on peut désassembler des fonctions avec `disassemble`.

```
gef➤  disass main
```

### Format

Par défaut la syntaxe AT\&T est utilisée. On peut la modifier avec ces commandes.

```
gef➤  set disassembly-flavor intel
gef➤  set disassembly-flavor att

gef➤  show disassembly-flavor
```

{% hint style="success" %}
**AT\&T**

```
push %ebp
mov %esp,%ebp
mov 0xc(%ebp),%eax
```

**Intel**

```
push ebp
mov ebp,esp
mov eax,DWORD PTR [ebp+0xc]
```

{% endhint %}

## Affichage

L'affichage se fait avec `x`.

```
gef➤  x/<format> <address>
```

Les formats que j'utilise le plus sont:

* `x`: he**x**adécimal
* `s`: **s**tring
* `i`: **i**nstruction assembleur

Afficher le contenu à l'adresse 0xdeadbeef comme une chaine de caractères.

```
gef➤  x/s 0xdeadbeef
```

Afficher la même chose en hexadécimal.

```
gef➤  x/x 0xdeadbeef
```

Afficher les 5 prochaines instructions à exécuter.

```
gef➤  x/5i $rip
```

Afficher 10 blocs mémoires en hexadécimal à partir de RBP.

```
gef➤  x/10x $rbp
```
