Cours d'assembleur
NASM, un ami qui vous veut du bien.

  1. Sommaire

Préface
Introduction
      Base de chiffres
      Les processeurs
      Les registres
      Les mnémoniques
      Le format ELF
      Les syscalls
      La Libc
      Etude de cas
Spécifications
      Déclaration des variables
      Inclure un fichier
      Adresses spéciales
      Définition de constantes
      Répétition d'instructions
      Opérateurs
      SEG et WRT
      Annuler l'optimisation
      Expressions critiques
      Labels locaux
      Définition de structures
      Les comparaisons
Macros
      Macros simples
      Macros sur plusieurs lignes
Analyse de codes
      Macro ENUM
      Recup de argc
      Code polymorphique
Debuggers
      Ndisasm
      GBD
      Strace
      Application
Conclusion
Références
Remerciements

  1. Préface

Je vous préviens de suite, je ne suis pas un “gourou” de l'assembleur, en écrivant ces lignes je continue à apprendre l'assembleur. Mais je voulais partager cette expérience avec toi publique :).
Vous me direz, mais à quoi ça sert de savoir programmer en assembleur ? Et je vous répondrez que l'assembleur est un langage très proche du langage machine. De ce fait, en sachant programmer en assembleur vous comprendrez beaucoup mieux les mécanismes qui régissent le fonctionnement de votre cpu, et de ses périphériques.
D'un point de vu pratique nous allons, ensemble, apprendre l'assembleur pour, dans une suite d'articles prochains, comprendre les principes du reversing et peut-être commencer à programmer nos premiers virus.
Nous allons travailler sur un i386 (comme 95% des PC) sous linux (debian sid). J'ai préféré travailler avec NASM car il adopte la syntaxe intel ce qui, pour un passage d'os à windows, pourrait être pratique.
Avant de commencer je voudrais casser quelques mythes, l'assembleur n'est pas plus dur à assimiler que le C, on peut l'utiliser pour faire des programmes de haut niveau (sockets, environnement graphique ...). Si l'assembleur n'est pas aussi utiliser que le C c'est principalement dûe au fait que le code n'est pas portable et qu'il est plus fastidieux à créer.
Si vous êtes déjà familier avec le fonctionnement d'un cpu et que vous avez déjà les bases en assembleur, passez l'introduction.
Bien, nous pouvons maintenant rentrer dans le vif du sujet. Entrez dans mon monde.

  1. Introduction

  1. Spécifications

    Nous allons maintenant apprendre les bases nécessaires pour comprendre un code NASM : la signification des mots clés, la déclaration des variables, l'étude de quelques mnémoniques ...

  1. Macros

    NASM comporte un outil très puissant, j'ai nommé le processeur de macros. Cet outil nous permet de définir des instructions plus ou moins complexes réutilisables de façon assez simple une fois que l'on a maîtriser la syntaxe. Dans ce chapitre nous allons apprendre à utiliser les macros déjà disponibles et à créer nos macros.

  1. Analyse de Code

    Maintenant que nous possédons les notions théoriques essentielles (et un peu plus quand même :D) nous allons étudier quelques codes nasm. Histoire de voir à quoi cela peut nous servir en pratique.

  1. Debuggers

    Pour découvrir les sources de bugs dans un code compiler on utilise des debuggers. Il en existe de deux sortes : les debuggers passifs et les debuggers actifs. Les debuggers passifs sont également appelés désassembleurs car ils ne font qu'afficher le code source de l'éxécutable. Ainsi, ils sont passifs du fait qu'ils n'éxécutent pas une ligne de code. Les debuggers actifs, eux, éxécutent le code tout en permettant grâce à certains signaux système de bloquer l'éxécution du programme.

  1. Conclusion

    Vous devriez maintenant posséder toutes les notions pour faire vos propres programmes mais également pour comprendre ceux des autres. N'oubliez pas que si vous ne comprenez pas une mnémonique, le manuel nasm est là pour vous aidez ; si vous ne comprenez pas un syscall, il y a la liste des syscalls et enfin, si votre problème est impénétrable, pensez à nos amis debuggers :)

  2. Références

    PC Assembly Language par Paul A. Carter
    Assembly Programming Journal
    Linux Assembly dot Org
    NASM manual
    System Calls for Assembly
    Login Hors-Série n°18

  3. Remerciements

    Un grand merci à tous ceux qui m'ont aidés à écrire cet article et à mieux comprendre l'assembleur. J'ai nommé :
    edcba
    Karsten Scheibler
    kaze
    mammon_
    neil
    viriiz


Par Flyers