Генерация функций во время выполнения в C
Я хотел бы сгенерировать функцию во время выполнения в C. И под этим я подразумеваю, что я по существу хотел бы выделить некоторую память, указать на нее и выполнить ее через указатель на функцию. Я понимаю, что это очень сложная тема, и мой вопрос наивен. Я также понимаю, что есть некоторые очень надежные библиотеки, которые делают это (например,nanojit).
Но я бы хотел освоить технику, начиная с основ. Может ли кто-нибудь знающий дать мне очень простой пример на C?
РЕДАКТИРОВАТЬ: Ответ ниже - отличный, но вот тот же пример для Windows:
#include <Windows.h>
#define MEMSIZE 100*1024*1024
typedef void (*func_t)(void);
int main() {
HANDLE proc = GetCurrentProcess();
LPVOID p = VirtualAlloc(
NULL,
MEMSIZE,
MEM_RESERVE|MEM_COMMIT,
PAGE_EXECUTE_READWRITE);
func_t func = (func_t)p;
PDWORD code = (PDWORD)p;
code[0] = 0xC3; // ret
if(FlushInstructionCache(
proc,
NULL,
0))
{
func();
}
CloseHandle(proc);
VirtualFree(p, 0, MEM_RELEASE);
return 0;
}