Wie generiert man mit gcc Assembler-Code in Intel-Syntax?
151
Die gcc -SOption generiert Assemblycode in AT & T-Syntax. Gibt es eine Möglichkeit, Dateien in Intel-Syntax zu generieren? Oder gibt es eine Möglichkeit, zwischen den beiden zu konvertieren?
Sie können einzelne Anweisungen einfach in der Shell mit llvm-mc konvertieren: echo "packsswb mm0,[bp+si-0x54]" | llvm-mc-3.2 -x86-asm-syntax=intelgibtpacksswb -84(%bp,%si), %mm0
Janus Troelsen
Antworten:
198
Hast du das versucht?
gcc -S -masm=intel test.c
Ungetestet, aber ich fand es in diesem Forum, wo jemand behauptete, es würde für sie funktionieren.
Ich habe es gerade auf dem Mac versucht und es ist fehlgeschlagen, also habe ich in meiner Manpage nachgesehen:
-masm=dialect
Outputasm instructions using selected dialect.Supported choices
are intel or att (the default one).Darwin does not support intel.
Funktioniert bei mir Aber ich kann einen anderen Weg sagen, obwohl dies nichts mit dem Ausführen von gcc zu tun hat. Kompilieren Sie die ausführbare Datei oder die Objektcodedatei und zerlegen Sie den Objektcode in der Intel asm-Syntax mit objdump wie folgt:
Es wird * .exe-Datei ergeben, und es hat meiner Erfahrung nach funktioniert.
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.
Funktioniert nicht auf meinem Fedora:$ gcc -S -masm=intel -mconsole a.c -o a.out gcc: error: unrecognized command line option ‘-mconsole’
d33tah
Arbeitet in Cygwin. Assembly wird als Intel eingegeben und als Intel in der .s-Datei ausgegeben. Wenn Sie verwenden, erhalten -o a.outSie keine .s-Datei.
echo "packsswb mm0,[bp+si-0x54]" | llvm-mc-3.2 -x86-asm-syntax=intel
gibtpacksswb -84(%bp,%si), %mm0
Antworten:
Hast du das versucht?
Ungetestet, aber ich fand es in diesem Forum, wo jemand behauptete, es würde für sie funktionieren.
Ich habe es gerade auf dem Mac versucht und es ist fehlgeschlagen, also habe ich in meiner Manpage nachgesehen:
Es kann auf Ihrer Plattform funktionieren.
Für Mac OSX:
Quelle: https://stackoverflow.com/a/11957826/950427
quelle
prefix
/noprefix
(nicht sicher, ob es wichtig ist, ob Clang die Baugruppe verbraucht).Das
Funktioniert bei mir Aber ich kann einen anderen Weg sagen, obwohl dies nichts mit dem Ausführen von gcc zu tun hat. Kompilieren Sie die ausführbare Datei oder die Objektcodedatei und zerlegen Sie den Objektcode in der Intel asm-Syntax mit objdump wie folgt:
Dies könnte helfen.
quelle
Ich habe diesen Code in der CPP-Datei:
Dieser Code funktioniert mit dieser GCC-Befehlszeile:
Es wird * .exe-Datei ergeben, und es hat meiner Erfahrung nach funktioniert.
Das ist alles.
quelle
$ gcc -S -masm=intel -mconsole a.c -o a.out gcc: error: unrecognized command line option ‘-mconsole’
-o a.out
Sie keine .s-Datei.