Hacking Wiki

Notes persos. Il y a probablement beaucoup d'erreurs donc privilégiez des sources plus fiables.

View on GitHub

Assembleur

Cet article présente différentes informations concernant le langage assembleur (ASM).

Outils

Les outils suivants sont utiles:

nasm

Documentation: http://www.nasm.us/doc/

$ représente l’addresse “courante

    label: db "Hello World" ; define byte
    len    equ  $-label   ; contient la longueur de label qui est $ (adresse courante) - label (adresse du début de la chaîne)

Génération d’executable

Pour générer un executable à partir de code ASM:

nasm -f elf32 -o test.o test.asm # Assembling
ld -melf_i386 -o test test.o # Linking

Code ASM

Instructions classiques

Quelqus instructions classiques:

mov eax, 0x01 ; met 1 dans eax
lea eax, [label] ; charge un pointeur vers label dans eax ( a revoir)
xchg reg1, reg2 ; échange les valeurs entre deux registres / pointeurs

System calls

On peut les trouver à /usr/include/x86_64-linux-gnu/asm/unistd_32.h

On peut avoir leur doc en faisant:

man 2 write
man 2 exit
[...]

Quand on fait un syscall:

Exemple de code ASM

Ceci est un exemple basique de code ASM:

; Commentaire

global _start

section .text ; contient le code assembleur

_start:
    ; syscall pour printer "Hello World"
    mov eax, 0x4    ; syscall 4 pour "write"
    mov ebx, 0x1    ; 1 pour stdout
    mov ecx, label
    mov edx, len    ; longueur
    int 0x80        ; effectue le syscall

    ; syscall pour faire un exit
    mov eax, 0x1    ; syscall 1 pour "exit"
    mov ebx, 0x3    ; renvoie 3 en sortie
    int 0x80

section .data ; contient des valeurs statiques comme des chaînes des strings
    label: db "Hello World" ; define byte
    len    equ  $-label   ; contient la longueur de label

Références