VirtualAllocEx
позволяет указать процесс, в котором выделяется память. Вы бы использовали это, чтобы выделить блок памяти. Обратите внимание, что вы не можете писать напрямую на возвращенный адрес - он находится в другом процессе. Вы бы написали имя DLL через WriteProcessMemory
.
Если вы намеревались разместить свой код в DllMain
, вы не должны. Windows удерживает внутреннюю блокировку при выполнении DllMain
, и это добавляет риск тупика, в зависимости от того, что вы намерены делать в своем коде ловушки. Вы можете получить адрес функции в вашей DLL и снова использовать CreateRemoteThread
, чтобы запустить ее в отдельном потоке после загрузки DLL.
Вместо того, чтобы реализовывать все это самостоятельно, я бы порекомендовал вам использовать библиотеку, которую кто-то уже написал, например EasyHook , которая поддерживает как управляемые, так и неуправляемые инъекции.