Como gerar e executar código nativo dinamicamente?

Gostaria de escrever um compilador JIT de prova de conceito muito pequeno para um processador de linguagem de brinquedos que escrevi (puramente acadêmico), mas estou tendo alguns problemas nas altitudes médias do design. Conceitualmente, estou familiarizado com o funcionamento do JIT - você compila bytecode no código (máquina ou montagem?) Para executar. No nível das porcas e parafusos, no entanto, não estou muito empolgadoquão você realmente fazfazendo este.

Minha (muito "newb") reação instintiva, já que não tenho a primeira pista por onde começar, seria tentar algo como o seguinte:

mmap () um bloco de memória, configurando o acesso para PROT_EXECescreva o código nativo no blocoarmazene os registros atuais (ponteiro da pilha, et al.) em algum lugar aconchegantemodificar os registros atuais para apontar para o bloco de código nativo na região mapeadao código nativo agora seria executado pela máquinarestaurar os registros anteriores

Isso é mesmoFechar para um / o algoritmo correto? Tentei examinar diferentes projetos que eu sei que têm compiladores JIT para estudar (comoV8), mas essas bases de código acabam sendo difíceis de consumir por causa de seu tamanho e tenho pouca ideia de onde começar a procurar.

questionAnswers(7)

yourAnswerToTheQuestion