El gcc -S
generará código ensamblador en la sintaxis de AT&T, ¿hay alguna forma de generar archivos en la sintaxis de Intel? ¿O hay una forma de convertir entre los dos?
Respuestas
¿Demasiados anuncios?¿Has probado esto?
gcc -S -masm=intel test.c
No lo he probado, pero lo encontré en este foro donde alguien afirmó que trabajaba para ellos.
Acabo de probar esto en el mac y falló, así que busqué en mi página de hombre:
-masm=dialect
Output asm instructions using selected dialect. Supported choices
are intel or att (the default one). Darwin does not support intel.
Puede funcionar en su plataforma.
Para Mac OSX:
clang++ -S -mllvm --x86-asm-syntax=intel test.cpp
El
gcc -S -masm=intel test.c
Funciona conmigo. Pero puedo decir otra cosa, aunque esto no tiene nada que ver con el funcionamiento de GCC. Compila el ejecutable o el archivo de código objeto y luego desensambla el código objeto en sintaxis Intel asm con objdump como se muestra a continuación:
objdump -d --disassembler-options=intel a.out
Esto podría ayudar.
Tengo este código en el archivo 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;
};
Ese código funcionó con esta línea de comando del GCC:
gcc.exe File.cpp -masm=intel -mconsole -o File.exe
Resultará un archivo *.exe, y funcionó en mi experiencia.
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.
Eso es todo.
Desafortunadamente gcc no puede hacer esto y la conversión es difícil porque algunas instrucciones en AT&T toman operandos en el mismo orden que los de Intel, por lo que hay que tener un caso especial. Además, algunas conversiones para el tamaño donde la derivación de la memoria y tal puede ser difícil. Lo mejor es usar un desensamblador que haga lo que quieras y asegúrate de hacer referencia a los archivos de símbolos y demás. Esto le permitirá llegar al 99% del camino.