Как сделать чтобы во вручную загруженной DLL работала нормально функция GetModuleHandle ? Ничего не придумывается кроме как прописать в таблице импорта адрес переходника.
Да, без LoadLibrary. Выделяем память, Читаем хидер, читаем секции, настраиваем релоки, настриваем импорт, выставляем права доступа секциям, вызываем DllMain. Все прекрасно работает пока не вызываются GetModuleHandle, GetCommandLine (вроде как), они выдают информацию о загрузчике, т.е. GetModuleHandle возвращает 0x00400000 хотя загрузил DLL по адресу 0x00320000. Ну это понятно, а вот как догрузить так чтобы все функции корректно работали ?
Они выдают информацию из слабодокументированных (отличающихся от билда к билду) структур, которые загрузчик должен заполнять GetModuleHandle,0 возвращает базовый адрес модуля, который инициализировал процесс (т.е. exe), для dll нужно указывать её имя (которое тоже ищется в тех структурах) Нужно полностью повторять работу настоящего загрузчика, т.е. заполнять эти структуры (смотри в сторону Peb.Ldr)
bogrus ну допустим я заполнил структуры, а куда их потом дописать чтобы система видела ? Я просто хочу полностью представлять процес.
А это смотря какая система, где в хипе ... Выделяй там кусок, заполняй, настраивай. Смотри LoadLibrary в отладчике
А кроме как в отладчике есть смысл смотреть Wine, ReactOS, SanOS ? Или всех их только смысл объединяет, а внутренности несовместимы ?
я так и понял, что имеется в виду версия, я хочу узнать можно ли получить информацию о работе реального загрузчика Win2000 из других проектов. То есть ориентируюсь только на системы NT/2K/XP.