Я думаю, что из меня фиговый программист. От нечего делать я выдумал (выдумываю) такую хтоническую архитектуру программ, что крыша уже едет. Обратите внимание так же на совершеное незнание темы.
И на то, что я уже интересуюсь фиг пойми чем...
Начнём с того, что я нефига не знаю как работает эмулятор процессора. И тем более сам процессор. (для меня магия, как из логических элементов И, ИЛИ, НЕ делается процессор) Ну понятно, оно там разбирает его байткод и по всей видимости начинает менять модель данных (посчитать что-нибудь, прерывание, что-нибудь скопировать в память из регистра и обратно)
Но как? Неужели длинная цепочка if (swith case) которая на каждую команду проверяет, не является ли проверяемая команда той, которая нам нужна? Там ищет как-то по умному, не просто в лоб? Само shith case компилятором оптимизируется?
А вот теперь шизофрения:
1 предложение:
Нам нужна своя реализация этого перебора, которая сравнивает первоначально с той командой, которая была по этому адресу раньше. Сравнивать в порядке популярности. Если надо - использовать оптимизированный поиск, а не просто перебор. Популярность строится динамически. Выбор между перебором и оптимизированным поиском возложим на эмулятор.
Нам нужно отслеживать попытки кода в памяти модифицировать себя и строить таблицу соответствия команд и адресов. Точнее даже список.
2:
Эмулятор должен жёстко модифицировать сам себя. Команды должны транслироваться прямо в машинный код хостового процессора. С использованием той самой таблицы, о которой я написал выше. И куча процедур для связи с "внешним миром". И исключение которое будет опять делать сравнение по списку. И вообще, даже не могу окинуть умом, как это всё будет работать.
3:
Нам как-то нужно понять, какой код выполняется бесконечно с теми же вводными данными. Чтобы не делать двойную работу.
Итого - монстр который сам себя патчит в памяти. Чем-то напоминает вообще компилятор. Только компилируем код целевого процессора в код того, на котором работаем. Прямо в память программы. И кучу всего презрев - передаём ему управление. Нафаршировав кодом для возможности вернуться обратно и исключениями которые приводят к тому, что этим местом займётся интерпретатор который и положит нужный код. Чтобы только избавиться от сравнений и всякого парсенья.
Второй вопрос - если выборка это такая беда, то почему самомодифицирующийся код - зло.
Наверняка внутри браузера с его тегами и кучей фигни - тоже жуткие swith-case if if if else.
Самомодифицирующийся браузерный движок?
(Можно как прогульщику, почему я всё-таки баран?)