Можно ли выполнять код из стека в стандартном C?

Следующий код работает не так, как задумано, но, надеюсь, иллюстрирует мою попытку:

long foo (int a, int b) {
  return a + b;
}

void call_foo_from_stack (void) {
  /* reserve space on the stack to store foo's code */
  char code[sizeof(*foo)];

  /* have a pointer to the beginning of the code */
  long (*fooptr)(int, int) = (long (*)(int, int)) code;

  /* copy foo's code to the stack */
  memcpy(code, foo, sizeof(*foo));

  /* execute foo from the stack */
  fooptr(3, 5);
}

Очевидно, sizeof (* foo) не возвращает размер кода функции foo () .

Я знаю, что выполнение стека ограничено на некоторых процессорах (или, по крайней мере, если установлен флаг ограничения) . Помимо вложенных функций GCC, которые в конечном итоге могут быть сохранены в стеке, есть ли способ сделать это в стандартном C?

17
задан Blagovest Buyukliev 20 September 2010 в 21:02
поделиться