Sinon concernant l’ASM, j’ai appris le NASM dans le cadre de ma L3 Informatique.
NASM est un compilateur de code assembleur type Intel qui fait un peut tout ![^^](/static/smileys/hihi.png)
En L3 ont a créé un compilateur de langage dit LL (voir théorie des langage), et donc à partir d’un programme en C qui décortique une grammaire LL (lexique, syntaxique, arbre abstrait) spécifique à notre compilateur LL, qui permet de génèré un code NASM que l’on compile.
Après cette compilation on obtient des « .o » (objet) qu’il faut linker avec « ld » en mode « elf-i386 » sous Linux, et sous Windows en « PE », par exemple « i386pe ».
Puis il faut faire attention, car en fonction des systèmes/émulation il peut y avoir certaines incompatibilités dans le code ASM, surtout au niveau des interruptions, c’est pour ça qu’en C on utilise la « libc ».
A savoir, tu peux voir toute les « Emulations » possible de ton linker avec « ld -V ».
A propos des interruptions, c’est un sujet assez important, puisque nécessaire pour faire des entrées/sorties, ou même pour arrêter son programme.
Et donc tu comprendras qu’il y a plein d’interruption différentes, et que par exemple, « int 0x80 » c’est coté Linux, et « int 0x21 » c’est du côté Windows/DOS.
L’idée et qu’avant chaque interruption il faut paramétré les registre nécessaire au travail fournit par le système, par exemple sous linux « mov eax, 1 », puis « int 0x80 » pour arrêter ton programme, tu peux ajouter « mov ebx, 5 » avant ton interruption pour qu’il renvoi la valeur « 5 » (par exemple), ce qui ressemblera à ceci (programme qui s’ouvre et se ferme aussi tôt) :
| section .text
global _start
_start: ; entrée start
mov eax, 1 ; 1 est le code de SYS_EXIT
mov ebx, 5 ; valeur de retour, pour 'exit'
int 0x80 ; exit
|
Il y a différent site qui traite le sujet des interruptions, mais pour voir rapidement ce qui existe :
Concernant les cours d’ASM, mon prof de L3 les a mis en libre accès, donc si ça t’intéresse :
Petite info, dépêche-toi vite de DL tout ça avant la rentrée universitaire, parce qu’il va tous enlever et remplir à nouveau au fur à mesure de ces cours …
Bon apprentissage !