Внедрение кода в исполняемый файл во время выполнения

Я работаю над приложением (написанным на C ++), которое генерирует некоторый машинный код во время выполнения (Linux, x86-64 сейчас, но я планирую перейти на РУКА). Затем он сохраняет сгенерированный код в памяти и выполняет его, перейдя в ячейку памяти. Долгое время у меня была проблема с выделением исполняемой памяти, но я, наконец, решил ее, используя:

uint8_t *memory = mmap (NULL, length, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);

Пока это работает, но я не уверен, что это элегантный способ делать такие вещи. Интересно, как исполняемый загрузчик это делает?

13
задан Goofy 3 June 2011 в 19:01
поделиться