Come impostare una variabile in GCC con l’assembly in linea della syntax Intel?

Perché questo codice non imposta temp a 1? Come faccio a farlo?

 int temp; __asm__( ".intel_syntax;" "mov %0, eax;" "mov eax, %1;" ".att_syntax;" : : "r"(1), "r"(temp) : "eax"); printf("%d\n", temp); 

Vuoi che il temp sia un risultato, non un input, penso. Provare:

  __asm__( ".intel_syntax;" "mov eax, %1;" "mov %0, eax;" ".att_syntax;" : "=r"(temp) : "r"(1) : "eax"); 

Questo codice fa ciò che stai cercando di ottenere. Spero che questo ti aiuta:

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

Devi passare un argomento all’assembler GCC.

 gcc.exe -masm=intel -c Main.c gcc.exe Main.o -oMain.exe 

E tu hai il codice C come questo:

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

Non dimenticare di aggiungere il prefisso underscore (_) per ogni variabile nella parola chiave asm (), altrimenti non lo riconoscerà.

E keyword asm () usa il prefisso ‘0x’ per ogni intero esadecimale, non il suffisso ‘h’.