Здравствуйте, ononim, Вы писали:
O>>>Релоцирование происходит загрузчиком. Но есть одно НО. Называется оно ASLR. Оно делается в ядре при первой загрузке длл в память, и таки по сути пре-релокация длл на случайную базу. Работает эта штука только если в хедере образа проставлена поддержка ASLR. O>>>Указывайте writecopy в ZwMapViewOfSection. Кстати SEC_IMAGE и SEC_COMMIT — вещи разные, SEC_IMAGE — это не прямое отображение файла на АП как SEC_COMMIT. A>>Я маплю секцию на адреса ядра с помощью MmMapViewInSystemSpace, вероятно я чего-то не понимаю, но делаю я так чтобы не было возможности доступа к этим данным из юзерленда. A>>Странная штука вот в чем, при SEC_IMAGE если внимательно посмотреть на отмапленный образ видно, что поле OptionalHeader.ImageBase изменено относительно диска, однако фиксапы не применены... То есть секция не только не соответствует тому что на диске, она также не соответствует тому что используется в памяти (там все релоки пофикшены). Я хочу получить оригинал, то есть без изменения даже полей PE-заголовков. O>Прикольно, впрочем я не вдавался в детали на каком конкретно этапе ASLR релоцирует имаж, возможно этим занисается загрузчик, запрашивая у ядра ASLR дельту через ZwQuerySection(..SectionAslrInformation..), которое эту дельту изначально придумывает и применяет к OptionalHeader.ImageBase на этапе создания секции.. Хотя смысл было так делать?
O>>>Вам таки нужно промапить имаж как имаж или просто сделать writecopy мэпинг данных файла? Если второе — ZwOpenFile->ZwCreateSection(..PAGE_WRITECOPY, SEC_COMMIT..)->ZwMapViewOfSection(..PAGE_WRITECOPY..) A>>Мне надо промапить имаж так чтобы в нем не было никаких изменений относительно диска. Если при этом есть возможность чтобы он был промаплен как имаж (SEC_IMAGE), то есть с соблюдением виртуальных адресов секций и т.п. (я уж не знаю что он еще там правит) — было бы здорово. A>>То есть мне нужен независимый мапинг dll неважно с SEC_IMAGE или без на адреса ядра. O>Ну тогда просто делайте writecopy мапинг — должно работать.
А есть ли возможность сделать writecopy-маппинг с MmMapViewInSystemSpace?