it-swarm.com.de

Wie verwendet man gcc, um Assembly-Code in Intel-Syntax zu generieren?

Das gcc -S -Option generiert Assembly-Code 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?

141
hyperlogic

Hast du das versucht?

gcc -S -masm=intel test.c

Ungetestet, aber ich fand es in diesem Forum , wo jemand behauptete, dass es für sie funktionierte.

Ich habe das gerade auf dem Mac ausprobiert und es ist fehlgeschlagen, also habe ich in meiner Manpage nachgesehen:

   -masm=dialect
       Output asm instructions using selected dialect.  Supported choices
       are intel or att (the default one).  Darwin does not support intel.

Es kann auf Ihrer Plattform funktionieren.

Für Mac OS X:

clang++ -S -mllvm --x86-asm-syntax=intel test.cpp

Quelle: https://stackoverflow.com/a/11957826/950427

184
Jason Dagit

Das

gcc -S -masm=intel test.c

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 disassemblieren Sie den Objektcode in Intel asm-Syntax mit objdump wie folgt:

 objdump -d --disassembler-options=intel a.out

Das könnte helfen.

16
phoxis

Ich habe diesen Code in der CPP-Datei:

#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;
 };

Dieser Code funktioniert mit dieser GCC-Befehlszeile:

gcc.exe File.cpp -masm=intel -mconsole -o File.exe

Es wird * .exe-Datei führen, 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.

Das ist alles.

5
RizonBarns