compilar - ¿Cómo establecer una variable en GCC con ensamblado en línea de sintaxis Intel?
gcc wikipedia (3)
Quiere que la temp
sea una salida, no una entrada, creo. Tratar:
__asm__(
".intel_syntax;"
"mov eax, %1;"
"mov %0, eax;"
".att_syntax;"
: "=r"(temp)
: "r"(1)
: "eax");
¿Por qué este código no establece la temp
en 1? ¿Cómo hago eso?
int temp;
__asm__(
".intel_syntax;"
"mov %0, eax;"
"mov eax, %1;"
".att_syntax;"
: : "r"(1), "r"(temp) : "eax");
printf("%d/n", temp);
Tienes que pasarle un argumento al ensamblador de GCC.
gcc.exe -masm=intel -c Main.c
gcc.exe Main.o -oMain.exe
Y tienes un código C como este:
#include <conio.h>
#include <stdio.h>
int myVar = 0;
int main(int argc, char *argv[])
{
asm("mov eax, dword ptr fs:[0x18]");
asm("mov eax, dword ptr ds:[eax+0x30]");
asm("movzx eax, byte ptr ds:[eax+0x2]");
asm("mov _myVar, eax");
if(myVar == 1) printf("This program has been debugged./r/n");
printf("Welcome./r/n");
getch();
return 0;
}
No olvide agregar el guión bajo del prefijo (_) para cada variable en la palabra clave asm (), o no lo reconocerá.
Y la palabra clave asm () usa el prefijo ''0x'' para cada entero hexadecimal, no el sufijo ''h''.
Este código hace lo que estás tratando de lograr. Espero que esto te ayude:
#include <stdio.h>
int main(void)
{
/* Compile with C99 */
int temp=0;
asm
( ".intel_syntax;"
"mov %0, 1;"
".att_syntax;"
: "=r"(temp)
: /* no input*/
);
printf("temp=%d/n", temp);
}