L'assembleur GNU est probablement déjà installé sur votre système. Essayez man as
pour voir les informations complètes sur l'utilisation. Vous pouvez utiliser as
pour compiler les fichiers individuels et ld pour les lier si vous le voulez vraiment, vraiment.
Cependant, GCC est un excellent frontal. Il peut assembler des fichiers .s pour vous. Par exemple :
$ cat >hello.s <<"EOF"
.section .rodata # read-only static data
.globl hello
hello:
.string "Hello, world!" # zero-terminated C string
.text
.global main
main:
push %rbp
mov %rsp, %rbp # create a stack frame
mov $hello, %edi # put the address of hello into RDI
call puts # as the first arg for puts
mov $0, %eax # return value = 0. Normally xor %eax,%eax
leave # tear down the stack frame
ret # pop the return address off the stack into RIP
EOF
$ gcc hello.s -no-pie -o hello
$ ./hello
Hello, world!
Le code ci-dessus est x86-64. Si vous voulez faire un exécutable indépendant de la position (PIE), il vous faut lea hello(%rip), %rdi
et call puts@plt
.
Un exécutable non-PIE (position- dépendant ) peut utiliser l'adressage absolu 32 bits pour les données statiques, mais un PIE doit utiliser le RIP-relatif LEA. (Voir également Différence entre movq et movabsq en x86-64 ni movq
ni movabsq
sont un bon choix).
Si vous voulez écrire du code 32 bits, la convention d'appel est différente et l'adressage relatif RIP n'est pas disponible. (Donc vous push $hello
avant l'appel, et pop les args de la pile après).
Vous pouvez également compiler du code C/C++ directement en assembleur si vous êtes curieux de savoir comment quelque chose fonctionne :
$ cat >hello.c <<EOF
#include <stdio.h>
int main(void) {
printf("Hello, world!\n");
return 0;
}
EOF
$ gcc -S hello.c -o hello.s
Voir aussi Comment supprimer le "bruit" de la sortie de l'assemblage GCC/clang ? pour en savoir plus sur l'examen de la sortie du compilateur et l'écriture de petites fonctions utiles qui compileront vers une sortie intéressante.
0 votes
Je suis dans le même bateau. Je n'ai jamais vraiment pris l'asm sur Linux parce qu'il n'y a pas de réelle présence. C'est peut-être parce que sous Windows, le cracking fait fureur.
0 votes
Ils ne répondent pas complètement à ma question. Je veux toujours savoir quelles commandes de la console vous utiliseriez pour compiler et exécuter des programmes dans NASM ou gaz.
0 votes
Ma préférence va au NASM. Je vous donne quelques informations sur la façon de le mettre en place et de le faire fonctionner sur Ubuntu ci-dessous.