Следующий код работает не так, как задумано, но, надеюсь, иллюстрирует мою попытку:
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?