Есть интересная программа, которая делает нужные мне вычисления. Параметры вычислений задаются в основном модуле программы (.ехе), реально все вычисления делает пяток функций одной из ДЛЛ этой программы (функция инициализации памяти и собственно основной запуск алгоритма подсчета). Всего в ДЛЛ около 20 функций (нужны 3-5 шт). Мне нужно прогнать вычисления, введя кучу собственных параметров, которые в проге нельзя ввести через интерфейс. Через бряк на функциях запуска РУКАМИ очень легко тормознуть прогу, подправить параметры и запустить прогу дальше, чтобы та родила ответ по моим параметрам. Нужно как-то программно это сделать. Причем сложность не только в самом вводе параметров, а еще желательно вклиниваться в программу, когда там УЖЕ произошла инициализация памяти и ДЛЛ готова к расчетам по входным параметрам. Иначе основная функция ничего не посчитает и естественно просто упадет. Мне бы хотелось реализовать один из следующих вариантов, но знаний и опыта маловато: а) написать свою софтину, которая после запуска и инициализации оригинальной программы смогла бы вызвать в DLL (в чужом процессе) основную функцию с моими параметрами и считать ответ. Читать память чужого процесса умею, а вызывать к исполнению чужие функци, ставить бряки как отладчик - пока не умею. Найти процесс по номеру и адреса функций (или нужных блоков памяти) сканированием памяти всей памяти - легко (программно). б) написать (на С++ или асме) свою ДЛЛ, которую я бы подсунул вместо оригинальной ДЛЛ. Моя прога ничего не делает, кроме как грузит оригинальную ДЛЛ и вызовы всех функций туда передает. Просто транслирует вызовы функций с аргументами в стеке дальше, типа "ДЛЛ-прокси". Если бы получилось, то моя ДЛЛ ждет вызова основной функции в оригинальной ДЛЛ (к этому моменту вся память уже инициализирована), а далее запускает основную функцию уже по собственной инициативе, не отправляя никуда результат. Сам же результат оригинальная ДЛЛ запишет поверх старого результата куда-то в память основной программы, что без труда можно считать (будет передан какой-то указатель на блок). Итого оригинальня прога вызовет основную функцию один раз, один раз получит ответ, но в середине между этими действиями я прогоню свои вычисления на всем готовеньком. Существует ли способ не вдаваясь в подробности тупо по алгоритму написать ДЛЛ-прокси? Типа смотрим все 20 функций ДЛЛ, смотрим кол-во параметров в стеке и так же без разбора все передаем в подключенную к моей софтине ДЛЛ. Реален ли этот вариант? Дописывать свой код прямо в чужой ДЛЛ не умею. в) этот вариант не рассматриваю, т.к. мало реален, но все же... Можно написать свою софтину, которая подключит оригинальную ДЛЛ и сама все функции вызовет (естественно, правильно инициализировав данные). И крайне не реально понять алгорим расчета, проведя дизасемблирование кода, чтобы потом аналог на С++ накатать... Посоветуйте, какой наиболее простой вариант достижения резльзульта? Может иные варианты есть?
_Oleg_ Вместо оригинального подставить новый модуль c такимже именем как у оригинального, который будет экспортировать такиеже функции как оригинальный модуль и импортировать функции из оригинального в простейшем случае если самопроверок там никаких нет на это.
а что тут делать-то.. ненужные функции через форвардинг, нужные через свои переходники, хоть на С++ пиши %)