Имеется некоторый exe файл. При старте он подгружает target.dll. Мне надо заменит тела некоторых функций из target.dll на свои. Если бы ехе сам подгружал мою dll вместе со своей, то там через handle'ы моя dll все бы подменила, есть соотв. код. Использую я detour. Для DetourFunction нужен handle процесса, можно ли его как-то получить? Или была идея замутить типа лаунчер, он загружает мою dll, потом нужный exe. Но так тоже не пашет. Есть еще вариант в лаунчере подгружать так же target.dll, тогда хандл там будет одинаковый и должно работать, но будет ли на практике?
Не будет, возвратит STATUS_CONFLICTING_ADDRESSES(ERROR_INVALID_ADDRESS), либо модуль будет отображён на другие адреса, соответственно описатель ваш изменится. Это не настоящий хэндл, это псевдохэндл, а они обычно являются ссылками как и в данном случае это адрес проекции.
сделайте свою target.dll с нужными для подмены функциями + function forwarding, переименуйте "старую" dll. В общем тут заморачиваться-то нечего, курите Рихтера. ADD: если target.dll подгружается динамически, то занесите свою длл в импорт exe-шника (это можно сделать например CFF-Explorer'ом) и хукайте LdrLoadDll на стадии DLL_PROCESS_ATTACH в своей длл.
По первому пункту: экспортировать из своей длл через pragma или типа того? Знаю такой способ, но 1500 функций перенаправлять не очень как-то. Второй пункт обязательно опробую, по ходу дела именно то, что я и хотел.
Если юзаешь detours, то то там все это реализовано и расписано как юзать (см. ф-ю DetourCreateProcessWithDll в мане к detours или, например, тут)
попробуй перехватывать GetProcAddressA/LdrGetProcedureAddress и подменять адрес базы на базу трудллки, т.к. я понимаю что твою дллку-переходник прога будет считать target.dll