Все в названии.По некоторым причинам я должен сделать это следующим образом.
Но когда я компилирую свой код, GCC (или, возможно, GAS ...) отображает следующую ошибку:
... / Temp /cc1C1fjs.s: 19: Ошибка: немедленный операнд недопустим с абсолютным переходом
Код:
int main ( int argc, char **argv )
{
/* Some code */
( (void(*)()) &&label)();
/* Some code */
return 0;
label:
asm ("push %ebp");
asm ("mov %esp,%ebp");
/* Some code */
printf("Hello world");
asm ("leave");
asm("ret");
}
Я уверен, что это должно работать, потому что я пытался создать поток, используя функцию CreateThread (Я под windows), указав в качестве точки входа адрес метки, и это работает на отлично.Итак, как я могу гарантировать, что компилятор принимает этот синтаксис?Или есть другие способы сделать это?