L' gcc -S
opzione genererà il codice assembly nella sintassi AT&T, c'è un modo per generare file nella sintassi Intel? O c'è un modo per convertire tra i due?
L' gcc -S
opzione genererà il codice assembly nella sintassi AT&T, c'è un modo per generare file nella sintassi Intel? O c'è un modo per convertire tra i due?
Risposte:
Hai provato questo?
gcc -S -masm=intel test.c
Non testato, ma l'ho trovato in questo forum dove qualcuno ha affermato che ha funzionato per loro.
Ho appena provato questo su Mac e non è riuscito, quindi ho cercato nella mia pagina man:
-masm=dialect
Output asm instructions using selected dialect. Supported choices
are intel or att (the default one). Darwin does not support intel.
Potrebbe funzionare sulla tua piattaforma.
Per Mac OSX:
clang++ -S -mllvm --x86-asm-syntax=intel test.cpp
prefix
/ noprefix
(non è sicuro che sia importante se Clang consuma il gruppo).
Il
gcc -S -masm=intel test.c
Funziona con me. Ma posso dire un altro modo, anche se questo non ha nulla a che fare con l'esecuzione di gcc. Compilare il file eseguibile o il file del codice oggetto, quindi disassemblare il codice oggetto nella sintassi Intel asm con objdump come di seguito:
objdump -d --disassembler-options=intel a.out
Questo potrebbe aiutare.
Ho questo codice nel file CPP:
#include <conio.h>
#include <stdio.h>
#include <windows.h>
int a = 0;
int main(int argc, char *argv[]) {
asm("mov eax, 0xFF");
asm("mov _a, eax");
printf("Result of a = %d\n", a);
getch();
return 0;
};
Questo codice ha funzionato con questa riga di comando GCC:
gcc.exe File.cpp -masm=intel -mconsole -o File.exe
Risulterà un file * .exe e ha funzionato nella mia esperienza.
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.
È tutto.
$ gcc -S -masm=intel -mconsole a.c -o a.out gcc: error: unrecognized command line option ‘-mconsole’
-o a.out
non otterrai un file .s.
echo "packsswb mm0,[bp+si-0x54]" | llvm-mc-3.2 -x86-asm-syntax=intel
givespacksswb -84(%bp,%si), %mm0