Estoy trabajando en la aplicación (escrita en C++), que genera código de máquina en tiempo de ejecución (Linux, x86-64 ahora, pero planeo migrar en ARM). A continuación, almacena el código generado en la memoria y lo ejecuta saltando a la ubicación de la memoria. Durante mucho tiempo he tenido un problema con la asignación de memoria ejecutable, pero finalmente lo solucioné usando:Inyectando código en ejecutable en tiempo de ejecución
uint8_t *memory = mmap (NULL, length, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
Hasta ahora funciona, pero no estoy seguro si es manera elegante de hacer tales cosas. Me pregunto cómo el cargador ejecutable hace esto?
Así se hace. –
posible duplicado de [Asignar ejecutable ram en c en Linux] (http://stackoverflow.com/questions/3125756/allocate-executable-ram-in-c-on-linux) – ninjalj