Следующий код не работает должным образом, но, надеюсь, иллюстрирует мою попытку:
long foo (int a, int b) {
return a + b;
}
void call_foo_from_stack (void) {
/* reserve space on the stack to store foo code */
char code[sizeof(*foo)];
/* have a pointer to the beginning of the code */
long (*fooptr)(int, int) = (long (*)(int, int)) code;
/* copy foo code to the stack */
memcpy(code, foo, sizeof(*foo));
/* execute foo from the stack */
fooptr(3, 5);
}
Очевидно, что sizeof(*foo)
не возвращает размер кода функции foo()
.
Мне известно, что выполнение стека ограничено некоторыми процессорами (или, по крайней мере, если установлен флаг ограничения). Помимо вложенных функций GCC, которые в конечном итоге могут быть сохранены в стеке, есть ли способ сделать это в стандартном C?