У вас есть (по крайней мере) два варианта:
- открыть файл DLL и модифицируют его, используя файл, операции чтения/записи
- нагрузку, DLL и модифицируют инструкции, прежде чем они выполняют
Оба варианта возможны, хотя с последним необходимо будет обойти или отключить защиту: код (в отличие от данных) загружается в память, которая недоступна для записи в большинстве (если не все - не уверены в CE) средах Windows.
С загруженным кодом существует прямая поддержка o/s для поиска адресов символов. Для изменения файла потребуется либо расширенное знание об декодировании символьной информации, либо интерпретация смещения файла, либо поиск шаблонов, помещенных в файл специально для этой цели. Это может быть логикой в точке входа DllMain, которая вызывается для инициализации DLL или любой другой функции в DLL, которая, как известно, выполняется достаточно рано.
Есть также методы DLL injection, которые могут выполнять те же концы.
Но вместо всего этого, что об организации для DLL использовать некоторые функции обратного вызова передать ему, как только вы написал код для выполнения? Трудно сказать, что полезно, не зная больше о том, чего вы пытаетесь достичь.
А как это сделать, легкий способ заключается в написании инструкции в модуле сборки, собрать его, а затем изучить сгенерированные байты. Естественно, вы должны полностью понять язык ассемблерной ассемблера, чтобы коррекции смещения ветви и относительного смещения, а также ссылки на данные, вычислялись или исправлялись правильно. Хотя возможно и иногда практично разобрать инструкции во время выполнения, обычно легче уже определить инструкции с помощью некоторых других средств (например, отладчика) и попросить программу найти последовательность байтов, а затем выполнить любые преобразования.
Это библиотека DLL, которую вы указали или иным образом контролируете? Или это готовая DLL, нуждающаяся в модификации? – wallyk 2010-11-30 16:45:24
Да, извините, я написал и скомпилировал DLL. – SamJam 2010-11-30 16:47:48
+1 для интересного вопроса. Извините, я не знаю, что ответ – 2010-11-30 16:48:44