Вставьте sleep () в функцию внешнего процесса - PullRequest
3 голосов
/ 19 августа 2011

Я знаю, как внедрить DLL в работающий процесс, а также как использовать функции, используемые внутри процесса, например,

void__stdcall remoteMethod(unsigned short id)
{
typedef void (__stdcall *pFunctionAddress)(unsigned short);
pFunctionAddress pMyFunction = (pFunctionAddress)(0xCAFEBABE);
pMyFunction(id);
}

Теперь я хочу добавить sleep () в существующий метод в запущенном процессе - это основной цикл программы, который не останавливается ни на секунду и использует всю вычислительную мощность.

Я знаю, что с такими фреймворками, как обходы, я мог бы создать функцию батута, которая вызывает мою функцию, а затем оригинальную - однако моя проблема в том, что цикл while (1) находится где-то внутри функции внешнего процесса. Так что я знаю смещение, где начинается цикл - и после этого я хотел бы сначала вызвать sleep (), а затем продолжить с обычным маршрутом цикла.

Единственная альтернатива, которую я видел до сих пор, - это двоичное редактирование программы, но это не очень хорошее решение.

Есть предложения? Спасибо

Ответы [ 4 ]

3 голосов
/ 19 августа 2011

Я думаю, вы пытаетесь быть слишком милым здесь.Просто поочередно вызовите SuspendThread / ResumeThread по таймеру.Я знаю, это некрасиво, но вы не собираетесь вводить свое решение ни в одном конкурсе красоты, который я подозреваю.

1 голос
/ 20 августа 2011
  1. Опубликуйте название программы ожидания ожидания.

  2. Дождитесь, пока ДУ отправят ненавистное письмо разработчику.

  3. Установите обновление, которое разработчик отправляет вам в качестве взятки для прекращения рассылки ненависти.

1 голос
/ 19 августа 2011

В принципе, если вы выполнялись один раз в пространстве другого процесса и знаете, что цикл не выполняется, то вы могли бы включить запись на текстовые страницы и патч фактический код цикла на месте. Вам понадобится несколько избыточных байтов для записи вызова вашей функции (расширение функции потребует много переписывания, так как все относительные смещения будут нарушены).

Это, однако, не очень легко и ужасно надежно. Подумайте, почему вы хотите к этому, и если вы можете достичь цели другим способом.

0 голосов
/ 19 августа 2011

Перехват API может решить вашу проблему. Отличная статья доступна в codeproject. см.

...