Как установить переменную в GCC с встроенной сборкой синтаксиса Intel? Почему этот код не устанавливает temp в 1? Как я на самом деле это делаю? int temp; __asm__( ".intel_syntax;" "mov %0, eax;" "mov eax, %1;" ".att_syntax;" : : "r"(1), "r"(temp) : "eax"); printf("%d\n", temp); Ответ 1 Вы хотите, чтобы temp был выходным, а не входным, я думаю. Попробуйте: __asm__( ".intel_syntax;" "mov eax, %1;" "mov %0, eax;" ".att_syntax;" : "=r"(temp) : "r"(1) : "eax"); Ответ 2 Этот код делает то, что вы пытаетесь достичь. Надеюсь, это поможет вам: #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); } Ответ 3 Вы должны передать аргумент GCC-ассемблеру. gcc.exe -masm=intel -c Main.c gcc.exe Main.o -oMain.exe И у вас есть код C следующим образом: #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; } Не забудьте добавить префикс underscore (_) для всех переменных в ключе asm(), или он не узнает его. И ключевое слово asm() использует префикс '0x' для каждого шестнадцатеричного целого числа, а не суффикса 'h'.
Ответ 1 Вы хотите, чтобы temp был выходным, а не входным, я думаю. Попробуйте: __asm__( ".intel_syntax;" "mov eax, %1;" "mov %0, eax;" ".att_syntax;" : "=r"(temp) : "r"(1) : "eax");
Ответ 2 Этот код делает то, что вы пытаетесь достичь. Надеюсь, это поможет вам: #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); }
Ответ 3 Вы должны передать аргумент GCC-ассемблеру. gcc.exe -masm=intel -c Main.c gcc.exe Main.o -oMain.exe И у вас есть код C следующим образом: #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; } Не забудьте добавить префикс underscore (_) для всех переменных в ключе asm(), или он не узнает его. И ключевое слово asm() использует префикс '0x' для каждого шестнадцатеричного целого числа, а не суффикса 'h'.