Ответ 1
Метод, который вы предлагаете, будет работать нормально.
Кажется, вы ввели DLL в целевой процесс и хотите получить адрес функции в этой DLL в целевом процессе из процесса, который ввел DLL.
Я предполагаю, что у вас также есть DLL, загруженная в процесс, который ввел DLL в целевой процесс и что вы хотите создать удаленный поток в целевом процессе и заставить его выполнить целевую функцию в целевом процессе.
Так как DLL, которую вы ввели, может не загружаться по тому же адресу в целевом процессе, что и в процессе инъекции, вы не можете просто использовать адрес, который вы получили бы при вызове GetProcAddress для функции в процессе инъекции.
HMODULE - это только базовый адрес DLL (подробнее см. этот ответ). Таким образом, вы можете взять HMODULE из dll в процессе инъекции и вычесть его из адреса, возвращаемого GetProcAddress, в вашу функцию. Затем вы можете добавить HMODULE вложенной DLL в целевом процессе к этому смещению, чтобы получить адрес целевой функции в инклинированной DLL в целевом процессе. Предполагая, что эта функция имеет правильную подпись, передайте ее как функцию потока для вашего вызова, чтобы создать удаленный поток, и теперь вы запускаете целевую функцию в целевом процессе.
Я объясняю это более подробно в этом ответе.