В чем разница между самомодифицирующимся кодом и отражением?

Самомодифицирующийся код - это код, который «изменяет свои собственные инструкции во время выполнения». Обычно это не делается вне ассемблера или вирусов.

Reflection - это просто способность программы динамически обращаться к собственному пространству имен в чтобы ссылаться на функции, классы и переменные динамически. Согласно этой статье, размышление - это не просто самоанализ ( способность программы исследовать себя), но также и ходатайство (способность программы изменять себя).

Итак, в чем разница, что отражение относится к умеренной форме самомодифицирующегося кода, где только имя переменной / класса / функции «изменяется» в инструкциях? То есть отражение - это более мягкая, менее «драматическая» форма модификации по сравнению с возможностью изменять природу самой инструкции, как в самомодифицирующемся коде.

Я правильно понимаю это различие?


person Michael Currie    schedule 09.12.2013    source источник


Ответы (1)


Нет, речь идет об изменении кода во время выполнения. Другой о чтении структуры и метаданных (самоанализ) кода во время выполнения.

Они могут быть взаимоисключающими. Вам не нужно знать, как код должен его модифицировать (если ОС это позволяет).

Обычно вы можете использовать отражение для выполнения кода, отличного от «обычного варианта использования», но это все тот же код. сравните это с изменением кода.

Цели совершенно не совпадают.

Однако я полагаю, что одним из примеров их небольшого пересечения является рассмотрение функции (F), которая вызывает две другие функции - A, затем B. Вы можете отразить это знание и затем вызвать B, затем A (таким образом изменив вариант использования (F )). как вы можете видеть, это не изменение кода, а просто предполагаемый вариант использования.

person Preet Sangha    schedule 09.12.2013