Вообщем сабж - считываю kernel32.dll из памяти в буффер начиная с адреса загрузки ImageBase,на ХР - всё ок,считывается вся длл,а вот на семёрке x64 - вылетает c page_fault после записи первой страницы (по адресу imagebase = 0x1000)? - В чём тут дело?Теперь на х64 секции(страницы) мапяться не непрерывно в память?
Без кода не очень понятно, что происходит. Во-первых, писать в секцию кода просто так нельзя -- надо сначала изменить атрибуты страниц, чтобы разрешали запись. Во-вторых, ImageBase == 0x1000 выглядит странно. Ну и не совсем понятно, процесс 32битный или 64битный?
AlexCasual Если вы динамически определяете адрес базы kernel32 ,то никаких проблем с ASLR быть не должно. Запостите код если конечно спалить не боитесь.
AlexCasual Неудачно съехали (изначально ведь было "imagebase = 0x1000"). Потому что RVA по определению отсчитывается от imagebase. Соответственно "RVA imagebase-а" — нуль. Хотя понятно, конечно, что имелся в виду просто RVA, а imagebase здесь вообще не причём.
l_inc,и что о чём? На х86 то же приложение отрабатывает по тому же алгоритму без проблем...Падает только на х64...
AlexCasual Может у тебя опечатка в первом посте и надо "imagebase + 0x1000"). Это очень похоже на старую историю - в softice можно было увидеть "пустые" секции кода, т.к. реально они подгружались только после первого обращения. Тут тоже характерный адрес 0х1000 - страницы по 4 Кб. Т.е. первая "подгружена", а вторая еще нет. Правда для kernel32.dll это странновато.
valterg,да,немного опечатался... Cитуация сабильно воспроизводится на Win7 x64...Идея с подгрузкой по требованию весьма интересна,НО...ведь я начинаю читать по адресу imagebase + 0x1000,значит обращаюсь к странице -> page fault -> подгрузка ->читаю себе спокойно дальше данные...А у меня там падение... Ни кто не сталкивался?
лично не, но тут где-то были обсуждения по-поводу непрерывности загрузки PE, помню что - непрерывность загрузки в память никем не гарантирована в мсдн
Это в "нормальной" проге, при нормальных действиях. Что ты там у себя творишь нам неведомо. Но явно что-то нестандартное. Ну и как вариант :