При моддинге игры с закрытым исходным кодом я изменяю машинный код во время выполнения, чтобы jmp вписывался в мой собственный код. Чтобы сделать это в общем случае, я использую сопоставление с образцом, чтобы найти места кода, которые я хочу изменить. (Шаблоны состоят только из символов/байтов и подстановочных знаков, где байты могут варьироваться.) Построив детерминированный конечный автомат из всех моих шаблонов, я могу осуществлять поиск за линейное время.
Однако я обнаружил, что создание DFA занимает больше времени, чем его фактический запуск, особенно в отладочных сборках (что мне, безусловно, нужно во время разработки), и это будет только ухудшаться по мере добавления новых шаблонов. Но это можно было бы легко сделать в автономном режиме. В настоящее время я думаю о том, как; компилятор может это сделать?
Насколько я знаю, это невозможно с функциями constexpr
, так как я не могу выделить с ними статическую память. Но у меня есть смутное ощущение, что это должно быть выполнимо безопасным для типов способом с метапрограммированием шаблонов. Или я, вероятно, столкнусь с ограничениями рекурсии при создании автоматов с сотнями или тысячами состояний?
И вне зависимости от технической возможности, разумно ли это? Или мне лучше, скажем, вычислить исходный файл на отдельном шаге сборки?