Самоизменяющийся код полностью поддерживается.В этом нет ничего плохого, и он используется для всех видов вещей.Ваше предположение, что код является константой, просто неверно.Это может быть, но может и не быть.
Один типичный пример - системы SMP и UP.Например, на машинах класса Pentium 4 Xeon разблокированный шаг может занять на 60 циклов меньше, чем заблокированный шаг.Блокированный прирост необходим только на машинах SMP.Чтобы заставить один и тот же код работать на компьютерах UP и SMP без накладных расходов на условие во время выполнения, обычно используется самоизменяющийся код.Вместо инструкции lock
используется недопустимый код операции, такой как ud2
.Прерывается недопустимое прерывание инструкции, и ud2
заменяется на lock
в системе SMP и nop
в системе UP.
Ядро экспортирует интерфейс модуля.Экспортируются:
__module_text_address __symbol_get symbol_put_addr use_module
module_layout module_put __module_put_and_exit module_refcount
register_module_notifier __symbol_put unregister_module_notifier module_get
Вы также можете проанализировать /proc/modules
, если действительно хотите.