Gerando funções em tempo de execução em C
Eu gostaria de gerar uma função em tempo de execução em C. E por isso quero dizer essencialmente gostaria de alocar alguma memória, aponte para ele e executá-lo via ponteiro de função. Eu percebo que este é um tópico muito complexo e minha pergunta é ingênua. Eu também percebo que existem algumas bibliotecas muito robustas que fazem isso (por exemplo,nanojit).
Mas eu gostaria de aprender a técnica, começando com o básico. Alguém poderia me dar um exemplo muito simples em C?
EDITAR: A resposta abaixo é ótima, mas aqui está o mesmo exemplo para o 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;
}