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?
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
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.
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.