Why doesn\'t this code set temp
to 1? How do I actually do that?
int temp;
__asm__(
\".intel_syntax;\"
\"mov %0, eax;\"
\"mov eax, %
You have to pass an argument to GCC assembler.
gcc.exe -masm=intel -c Main.c
gcc.exe Main.o -oMain.exe
And you have C code like this:
#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;
}
Don't forget to add prefix underscore (_) for every variables in asm() keyword, or it won't recognize it.
And keyword asm() use prefix '0x' for every hexadecimal integer, not suffix 'h'.
You want temp
to be an output, not an input, I think. Try:
__asm__(
".intel_syntax;"
"mov eax, %1;"
"mov %0, eax;"
".att_syntax;"
: "=r"(temp)
: "r"(1)
: "eax");
This code does what you are trying to achieve. I hope this helps you:
#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);
}