> 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/pwn/shellcode.md).

# Shellcode

Un shellcode est une **chaîne de caractères qui représente un programme exécutable**. Ils sont souvent utilisés pour obtenir un shell (terminal) avec la commande `"/bin/sh"`.

Quand on écrit un shellcode il faut **éviter les octets nuls** car les fonctions comme `strcpy` **s'arrêtent au premier caractère de fin de chaîne rencontré**. Pour s'assurer que l'entièreté du shellcode soit copiée il vaut mieux trouver d'autres manières d'écrire le code.

Par exemple il existe plusieurs façons de mettre un registre à zéro:

```
mov rax, 0x0
xor rax, rax
```

{% hint style="success" %}
Voir [Injection de processus](/cyber/pwn/shellcode/injection-de-processus.md) pour l'écriture de shellcode.
{% endhint %}
