ASLR или что?

Тема в разделе "WASM.RESEARCH", создана пользователем AlexCasual, 11 ноя 2011.

  1. AlexCasual

    AlexCasual New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2009
    Сообщения:
    120
    Вообщем сабж - считываю kernel32.dll из памяти в буффер начиная с адреса загрузки ImageBase,на ХР - всё ок,считывается вся длл,а вот на семёрке x64 - вылетает c page_fault после записи первой страницы (по адресу imagebase = 0x1000)? - В чём тут дело?Теперь на х64 секции(страницы) мапяться не непрерывно в память?
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Без кода не очень понятно, что происходит.

    Во-первых, писать в секцию кода просто так нельзя -- надо сначала изменить атрибуты страниц, чтобы разрешали запись. Во-вторых, ImageBase == 0x1000 выглядит странно. Ну и не совсем понятно, процесс 32битный или 64битный?
     
  3. AndjellaArtavazdovna

    AndjellaArtavazdovna New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2010
    Сообщения:
    615
    AlexCasual
    Если вы динамически определяете адрес базы kernel32 ,то никаких проблем с ASLR быть не должно.
    Запостите код если конечно спалить не боитесь.
     
  4. AlexCasual

    AlexCasual New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2009
    Сообщения:
    120
    приложение х64.
    а чем RVA imagebase-а = 0х1000 странно?
    я не пишу в секцию,я читаю из неё....
     
  5. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    AlexCasual
    Неудачно съехали (изначально ведь было "imagebase = 0x1000"). Потому что RVA по определению отсчитывается от imagebase. Соответственно "RVA imagebase-а" — нуль. Хотя понятно, конечно, что имелся в виду просто RVA, а imagebase здесь вообще не причём.
     
  6. AlexCasual

    AlexCasual New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2009
    Сообщения:
    120
    l_inc,и что о чём?

    На х86 то же приложение отрабатывает по тому же алгоритму без проблем...Падает только на х64...
     
  7. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    AlexCasual
    Может у тебя опечатка в первом посте и надо "imagebase + 0x1000").

    Это очень похоже на старую историю - в softice можно было увидеть "пустые" секции кода, т.к. реально они подгружались только после первого обращения. Тут тоже характерный адрес 0х1000 - страницы по 4 Кб. Т.е. первая "подгружена", а вторая еще нет. Правда для kernel32.dll это странновато.
     
  8. AlexCasual

    AlexCasual New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2009
    Сообщения:
    120
    valterg,да,немного опечатался...

    Cитуация сабильно воспроизводится на Win7 x64...Идея с подгрузкой по требованию весьма интересна,НО...ведь я начинаю читать по адресу imagebase + 0x1000,значит обращаюсь к странице -> page fault -> подгрузка ->читаю себе спокойно дальше данные...А у меня там падение...

    Ни кто не сталкивался?
     
  9. vxloader

    vxloader New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2011
    Сообщения:
    18
    лично не, но тут где-то были обсуждения по-поводу непрерывности загрузки PE, помню что - непрерывность загрузки в память никем не гарантирована в мсдн
     
  10. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Это в "нормальной" проге, при нормальных действиях. Что ты там у себя творишь нам неведомо. Но явно что-то нестандартное.

    Ну и как вариант :