¿Cómo se usa gcc para generar código de ensamblaje en la sintaxis de Intel?
151
La gcc -Sopción generará código de ensamblaje en la sintaxis de AT&T, ¿hay alguna forma de generar archivos en la sintaxis de Intel? ¿O hay una manera de convertir entre los dos?
puede convertir instrucciones individuales fácilmente en el shell con llvm-mc: echo "packsswb mm0,[bp+si-0x54]" | llvm-mc-3.2 -x86-asm-syntax=inteldapacksswb -84(%bp,%si), %mm0
Janus Troelsen
Respuestas:
198
¿Has probado esto?
gcc -S -masm=intel test.c
No probado, pero lo encontré en este foro donde alguien afirmó que funcionaba para ellos.
Acabo de probar esto en Mac y falló, así que busqué en mi página de manual:
-masm=dialect
Outputasm instructions using selected dialect.Supported choices
are intel or att (the default one).Darwin does not support intel.
Funciona conmigo Pero puedo decir de otra manera, aunque esto no tiene nada que ver con ejecutar gcc. Compile el archivo ejecutable o el código del objeto y luego desmonte el código del objeto en la sintaxis de Intel asm con objdump como se muestra a continuación:
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.
echo "packsswb mm0,[bp+si-0x54]" | llvm-mc-3.2 -x86-asm-syntax=intel
dapacksswb -84(%bp,%si), %mm0
Respuestas:
¿Has probado esto?
No probado, pero lo encontré en este foro donde alguien afirmó que funcionaba para ellos.
Acabo de probar esto en Mac y falló, así que busqué en mi página de manual:
Puede funcionar en su plataforma.
Para Mac OSX:
Fuente: https://stackoverflow.com/a/11957826/950427
fuente
prefix
/noprefix
(no estoy seguro si importa si Clang consume el ensamblado).los
Funciona conmigo Pero puedo decir de otra manera, aunque esto no tiene nada que ver con ejecutar gcc. Compile el archivo ejecutable o el código del objeto y luego desmonte el código del objeto en la sintaxis de Intel asm con objdump como se muestra a continuación:
Esto puede ayudar.
fuente
Tengo este código en el archivo CPP:
Ese código funcionó con esta línea de comando GCC:
Resultará un archivo * .exe, y funcionó en mi experiencia.
Eso es todo.
fuente
$ gcc -S -masm=intel -mconsole a.c -o a.out gcc: error: unrecognized command line option ‘-mconsole’
-o a.out
, no obtendrá un archivo .s.