Собственно в книге "Secure Programming Cookbook for C and C++" была приведена такая ассемблерная вставка для обфускации if-перехода в дизассемблерах: Код (Text): #define IF_ZERO(val) \ asm(" xorl %%ebx, %%ebx\n\t" \ " negl %%eax\n\t" \ " rcl $3, %%ebx\n\t" \ " movl 0f( , %%ebx ), %%eax \n\t" \ " jmp *%%eax \n" \ "0: \n\t" \ " .long 1f\n\t" \ " .long 2f\n" \ "1: \n" \ : : "a" (val) : "%ebx"); #define ELSE \ asm(" jmp 3f\n\t" \ "2: \n"); #define ENDIF \ asm("3: \n"); И было приведено описание того, как данный код работает: А проблема в том, что GCC ругается следующим образом: Прошу помочь разобратиься с этой ошибкой. Благодарю...
Я так понимаю, что здесь обязательно должна быть ELSE-ветвь, т.е. код должен быть вида Код (Text): IF_ZERO(val) ...some code... ELSE ...some other code... ENDIF