Compiler/exécuter assembleur sous Linux?
Je suis assez nouveau dans Linux (Ubuntu 10.04) et un total novice à l'assembleur. J'ai suivi quelques tutoriels et je ne pouvais pas trouver quelque chose de spécifique à Linux.
Donc, ma question est, qu'est ce qu'un bon paquet à compiler/exécuter assembleur et ce sont la ligne de commande pour compiler/exécuter pour que le paquet?
- Je suis dans le même bateau. Je n'ai jamais vraiment ramassé asm sur Linux car il n'y a pas de présence réelle. C'est peut-être parce que sous Windows, la fissuration est à la mode.
- Ce n'est pas complètement répondu à ma question. Je veux toujours savoir ce que les commandes de la console vous pouvez utiliser pour compiler et exécuter des programmes dans les MSNA ou de gaz
- Ma préférence est de MSNA. Je vous donne quelques infos sur la façon de l'obtenir vers le haut et en cours d'exécution sur Ubuntu ci-dessous.
Vous devez vous connecter pour publier un commentaire.
De l'assembleur GNU (gaz) et de MSNA sont deux bons choix. Cependant, ils ont quelques différences, la plus grande étant de l'ordre vous mettent des opérations et de leurs opérandes.
le gaz de AT&T syntaxe (guide: https://stackoverflow.com/tags/att/info):
msna utilise Intel style (guide: https://stackoverflow.com/tags/intel-syntax/info):
Soit on va probablement faire ce dont vous avez besoin. GAZ est également équipé d'un processeur Intel-syntaxe de la mode, qui est un peu comme MASM, pas de MSNA.
Essayer ce tutoriel: http://asm.sourceforge.net/intro/Assembly-Intro.html
Voir aussi plus des liens vers des guides et des documents de Débordement de Pile est x86 balise wiki
De l'assembleur GNU est probablement déjà installé sur votre système. Essayez
man as
voir toutes les informations sur l'utilisation. Vous pouvez utiliseras
pour compiler des fichiers individuels et ld pour le lien si vous voulez vraiment, vraiment.Cependant, GCC fait un grand front-end. Il peut assembler .les fichiers pour vous. Par exemple:
Le code ci-dessus est x86-64. Si vous souhaitez faire un indépendant de la position de l'exécutable (PIE), vous devez
lea hello(%rip), %rdi
, etcall puts@plt
.Un non-PIE exécutable (position-dépendante) peut utiliser 32 bits adressage absolu pour les données statiques, mais une TARTE doit utiliser RIP-par rapport LEA. (Voir aussi Différence entre movq et movabsq en x86-64 ni
movq
nimovabsq
sont un bon choix.)Si vous souhaitez écrire du code 32 bits, la convention d'appel est différent, et RIP-l'adressage relatif, n'est pas disponible. (Donc, si vous voulez
push $hello
avant l'appel, et de la pop la pile args après).Vous pouvez également compiler du code C/C++ directement à l'assemblée si vous êtes curieux de voir comment quelque chose fonctionne:
Voir aussi Comment enlever le "bruit" de GCC/clang assemblée de sortie? pour en savoir plus sur la recherche à la sortie du compilateur, et l'écriture utile de petites fonctions qui permettra de compiler pour résultat intéressant.
Si vous utilisez des MSNA, la ligne de commande est juste
où 'fichier.asm' est votre fichier d'assemblage (code) et 'le fichier.o' est un objet de fichier vous pouvez lier avec
gcc -m32
ould -melf_i386
. (Assemblage avecnasm -felf64
fera une version 64 bits de fichier de l'objet, mais bonjour le monde exemple ci-dessous utilise 32 bits du système d'appels, et ne fonctionnera pas dans une TARTE exécutable.)Voici quelques infos:
http://www.nasm.us/doc/nasmdoc2.html#section-2.1
Vous pouvez installer MSNA dans Ubuntu avec la commande suivante:
Ici est une base Bonjour tout le Monde sous Linux assemblée pour aiguiser votre appétit:
http://web.archive.org/web/20120822144129/http://www.cin.ufpe.br/~if817/arquivos/asmtut/index.html
J'espère que c'est ce que vous demandez...
Il est également FASM pour Linux.
Il comiles avec
Ma suggestion serait d'obtenir le livre de Programmation De Sol:
http://nongnu.askapache.com/pgubook/ProgrammingGroundUp-1-0-booksize.pdf
Qui est un très bon point de départ pour entrer dans la programmation assembleur sous linux et ça explique beaucoup de principes de base que vous devez comprendre pour commencer.
L'assembleur(GNU) est comme(1)
3 syntaxe (msna, tasm, gaz ) dans 1 assembleur, yasm.
http://www.tortall.net/projects/yasm/
Pour Ubuntu 18.04 installer
nasm
. Ouvrez le terminal et tapez:sudo apt install as31 nasm
msna docs
Pour la compilation et l'exécution: