Метаморфизм
Один (сомнительный) случай использования, который мне приходит в голову, это метаморфические компьютерные вирусы .Это вредоносные программы, которые скрывают себя от обнаружения на основе сигнатур , переписывая свой машинный код в семантически эквивалентное представление, которое выглядит другим.
Прыжки на батуте
Другим (более сложным, но также более распространенным) вариантом использования является trampolining , метод, основанный на динамическом генерировании кода для решения определенных проблем с вызовами вложенных функций.
JIT-компиляция
Наиболее распространенное использование динамического генерирования кода, о котором я могу думать, это JIT (оперативная) компиляция .Современные языки, такие как .NET или Java, компилируются не в машинный код, а в некоторый промежуточный язык (называемый байт-кодом).Этот байт-код затем интерпретируется при выполнении программы (виртуальной машиной, написанной для целевой архитектуры).В то же время фоновый процесс проверяет, какие части кода выполняются очень часто.Эти части имеют хорошую возможность динамически компилироваться в машинный язык для максимальной производительности.Все это происходит во время выполнения программы!
Последствия для безопасности
Следует иметь в виду, что возможность интерпретировать данные как код полезна для использованиядыры в безопасности в компьютерном программном обеспечении, поэтому тенденция в современных аппаратных и операционных системах состоит в том, чтобы включать и, если возможно, даже обеспечивать разделение кода и данных (см. также NX bit и DEP ).