Generando funciones en tiempo de ejecución en C
Me gustaría generar una función en tiempo de ejecución en C. Y con esto quiero decir que esencialmente me gustaría asignar algo de memoria, señalarlo y ejecutarlo a través del puntero de función. Me doy cuenta de que este es un tema muy complejo y mi pregunta es ingenua. También me doy cuenta de que hay algunas bibliotecas muy robustas que hacen esto (por ejemplo,nanojit).
Pero me gustaría aprender la técnica, comenzando con lo básico. ¿Podría alguien con conocimientos darme un ejemplo muy simple en C?
EDITAR: La respuesta a continuación es excelente, pero este es el mismo ejemplo para 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;
}