A>Проблема следующая. A>Хочу создать в ядре свою проекцию ранее загруженной DLL. И не могу. A>ZwOpenFile->ZwCreateSection(PAGE_WRITECOPY+SEC_IMAGE)->дальше маппинг. A>Но вот в чем проблема. Страницы отмапленные не новые, а соответствуют страницам ранее загруженной DLL. То есть в хедерах уже поправлен imagebase на релоцированный и т.п.
Релоцирование происходит загрузчиком. Но есть одно НО. Называется оно ASLR. Оно делается в ядре при первой загрузке длл в память, и таки по сути пре-релокация длл на случайную базу. Работает эта штука только если в хедере образа проставлена поддержка ASLR.
A>Окей, создаю секцию с SEC_COMMIT, но тут уже другая проблема, когда я произвожу изменения, они записываются на диск (в общем, между повторными вызовами они постоянны), а я этого не хочу.
Указывайте writecopy в ZwMapViewOfSection. Кстати SEC_IMAGE и SEC_COMMIT — вещи разные, SEC_IMAGE — это не прямое отображение файла на АП как SEC_COMMIT.
A>Белый пушной зверек, как же мне создать свое отображение, в котором я мог хозяйничать, которое бы соответствовало содержимому на диске? A>То есть мне нужна _новая_ моя приватная секция, а не существующая, которая берется из файлового объекта. A>Заранее спасибо.
Вам таки нужно промапить имаж как имаж или просто сделать writecopy мэпинг данных файла? Если второе — ZwOpenFile->ZwCreateSection(..PAGE_WRITECOPY, SEC_COMMIT..)->ZwMapViewOfSection(..PAGE_WRITECOPY..)
Как много веселых ребят, и все делают велосипед...