Вы пытаетесь сделать что-то хитрое, и я не совсем понимаю, что это такое.Из вашего описания у вас есть как минимум четыре вещи:
- Управляемый EXE
- Управляемый DLL
- Неуправляемый EXE
- Неуправляемый DLL
некоторые из которых вы контролируете (т.е. исходный код), а некоторые нет.
Вы хотите использовать процесс, который вы называете «инъекцией», чтобы изменить модуль, который вы не контролирует вызов модуля, над которым вы делаете .Для этого вы используете инструмент, который требует, чтобы у вас была неуправляемая точка входа в адресном пространстве процесса.
Если вы получаете то, что вы хотите с неуправляемыми модулями, тогда все, что вам нужно сделатьэто написать новый модуль смешанного режима (над которым вы, очевидно, имеете контроль), чтобы вызвать управляемую DLL, которой вы не управляете.Теперь у вас есть неуправляемая DLL (для целей экспорта), и проблема ее управления исчезла.
Для вызова управляемого кода из нового неуправляемого модуля-оболочки можно использовать методы, описанные в этой вводной статье.:
В основном вам необходим проект C ++ / CLI, который ссылается на управляемую DLL черного ящика ивызывает его и экспортирует неуправляемую точку входа, которую вы можете «взять по адресу» для инъекции.Поиск найдет вам гораздо больше идей.
Наконец, можете ли вы использовать private
методы в управляемой DLL (над которой у вас нет контроля), используя этот метод?Нет, не напрямую.Тем не менее, это управляемая DLL, поэтому она должна иметь некоторые public
точек входа, чтобы они когда-либо были кому-нибудь полезны, и их можно вызывать.Если этого недостаточно, вы можете использовать отражение из C ++ / CLI для вызова закрытых методов и доступа к закрытым членам.