Comment utilisez-vous gcc pour générer du code d'assemblage dans la syntaxe Intel?
151
L' gcc -Soption générera du code d'assemblage dans la syntaxe AT&T, existe-t-il un moyen de générer des fichiers dans la syntaxe Intel? Ou y a-t-il un moyen de convertir entre les deux?
vous pouvez facilement convertir des instructions simples dans le shell avec llvm-mc: echo "packsswb mm0,[bp+si-0x54]" | llvm-mc-3.2 -x86-asm-syntax=inteldonnepacksswb -84(%bp,%si), %mm0
Janus Troelsen
Réponses:
198
Avez-vous essayé cela?
gcc -S -masm=intel test.c
Non testé, mais je l'ai trouvé dans ce forum où quelqu'un a affirmé que cela fonctionnait pour eux.
J'ai juste essayé ceci sur le mac et cela a échoué, alors j'ai regardé dans ma page de manuel:
-masm=dialect
Outputasm instructions using selected dialect.Supported choices
are intel or att (the default one).Darwin does not support intel.
Fonctionne avec moi. Mais je peux dire une autre façon, même si cela n'a rien à voir avec l'exécution de gcc. Compilez l'exécutable ou le fichier de code objet, puis désassemblez le code objet dans la syntaxe Intel asm avec objdump comme ci-dessous:
Il en résultera un fichier * .exe, et cela a fonctionné selon mon expérience.
Notes:
immediate operand must be use _variable in global variabel, not local variable.
example: mov _nLength, eax NOT mov $nLength, eax or mov nLength, eax
A number in hexadecimal format must use at&t syntax, cannot use intel syntax.
example: mov eax,0xFF-> TRUE, mov eax,0FFh-> FALSE.
Ne fonctionne pas sur mon Fedora:$ gcc -S -masm=intel -mconsole a.c -o a.out gcc: error: unrecognized command line option ‘-mconsole’
d33tah
Fonctionne dans cygwin. L'assembly entre comme intel, sort comme intel dans le fichier .s. Si vous utilisez, -o a.outvous n'obtiendrez pas de fichier .s.
echo "packsswb mm0,[bp+si-0x54]" | llvm-mc-3.2 -x86-asm-syntax=intel
donnepacksswb -84(%bp,%si), %mm0
Réponses:
Avez-vous essayé cela?
Non testé, mais je l'ai trouvé dans ce forum où quelqu'un a affirmé que cela fonctionnait pour eux.
J'ai juste essayé ceci sur le mac et cela a échoué, alors j'ai regardé dans ma page de manuel:
Cela peut fonctionner sur votre plateforme.
Pour Mac OSX:
Source: https://stackoverflow.com/a/11957826/950427
la source
prefix
/noprefix
(je ne sais pas si cela compte si Clang consomme l'assemblage).le
Fonctionne avec moi. Mais je peux dire une autre façon, même si cela n'a rien à voir avec l'exécution de gcc. Compilez l'exécutable ou le fichier de code objet, puis désassemblez le code objet dans la syntaxe Intel asm avec objdump comme ci-dessous:
Cela pourrait aider.
la source
J'ai ce code dans le fichier CPP:
C'est du code qui fonctionne avec cette ligne de commande GCC:
Il en résultera un fichier * .exe, et cela a fonctionné selon mon expérience.
C'est tout.
la source
$ gcc -S -masm=intel -mconsole a.c -o a.out gcc: error: unrecognized command line option ‘-mconsole’
-o a.out
vous n'obtiendrez pas de fichier .s.