Предположим, я хочу внедрить DLL в процесс, который хочет редактировать значение адреса A каждые 250 мс. Мне нужно будет использовать DllMain, верно? Проблема в том, что мне не разрешают ждать внутри DllMain. Так я бы создал тему? Или это не обходит ограничения? Как бы я поступил так?
Кроме того, есть ли преимущества использования DLL-инъекций для редактирования памяти приложения по сравнению с использованием EXE?
Кроме того, какой размер стека должен быть в CreateThread? Что если он слишком маленький или слишком большой? Как я знаю, сколько мне нужно?
Из вашего описания кажется, что вы уже знаете, как заставить целевой процесс загрузить вашу DLL. Если мое предположение верно, то ответ прост: создайте поток из DLLMain и внедрите свою логику в поток. Если ваш код соответствует правилам, изложенным ниже, у вас все должно быть в порядке.
это документ описывает, что можно и нельзя делать в DLLMain и почему.
Как задокументировано, вы никогда не должны выполнять следующие задачи из DllMain:
Следующие задачи безопасны для выполнения в DllMain:
Ваш второй вопрос мне менее понятен. Чтобы внедрить код в другой процесс, вы должны начать откуда-нибудь (браузер, exe и т. Д.), А затем записать его в память целевого процесса, чтобы он загрузил вашу DLL.
Других решений пока нет …