У вас есть (как минимум) два варианта:
- открыть файл DLL и изменить его с помощью операций чтения / записи файла
- загрузить DLL и изменить инструкции перед их выполнением
Возможно и то и другое, хотя с последним необходимо обойти или отключить защиту: код (в отличие от данных) загружается в память, которая недоступна для записи в большинстве (если не во всех -не уверен насчет среды CE) Windows.
С загруженным кодом имеется прямая поддержка o / s для поиска адресов символов.Изменение файла потребует либо дополнительных знаний о декодировании информации о символах и интерпретации смещения файла, либо поиска шаблонов, помещенных в файл специально для этой цели.Это может быть логика в точке входа DllMain, которая вызывается для инициализации DLL, или любая другая функция в DLL, которая, как известно, выполняется достаточно рано.
Существуют также методы инъекция DLL , который может достичь тех же целей.
Но, вместо всего этого, как насчет того, чтобы организовать для DLL использование некоторой функции обратного вызова, передаваемой ей после того, как вы составили код для выполнения?Трудно сказать, что полезно, не зная больше о том, что вы пытаетесь выполнить.
Что касается того, как это сделать, то простой способ - написать инструкции в модуле сборки, собрать его изатем изучите сгенерированные байты.Естественно, вы должны хорошо понимать целевой язык ассемблера, чтобы смещения переходов и относительных переходов, а также ссылки на данные были правильно рассчитаны или исправлены.Хотя возможно и иногда практично разбирать инструкции во время выполнения, обычно проще уже идентифицировать инструкции другими способами (например, отладчиком) и заставить программу искать последовательность байтов, а затем выполнять любые необходимые преобразования.