+1
// максимальный размер функции в байтах
const int maxFuncSize = 200;
// буффер для хранения кода функции
// uint32_t - для того, чтоб буфер был выровнен по границе двойного слова
uint32_t func_buffer[maxFuncSize / 4];
// тип указателя на функцию
typedef void (*func_ptr_t)(void);
// объявляем указатель на функцию
func_ptr_t func_ptr;
...
// записываем в буффер код функции откуда надо
memcpy(func_buffer, source_buffer, size_of_func);
...
// присваиваем указателю адрес начала буфура
func_ptr = (func_ptr_t)func_buffer;
// вызываем функцию по указателю
func_ptr();

Как-то так.
При таком подходе надо помнить, что загружаемая функция должна быть позиционо независимой.
В справке Кейла есть раздел «Position independence qualifiers»
  • avatar
  • neiver
  • 14 июля 2011, 18:05