Перехват чтения mapped памяти

Тема в разделе "WASM.WIN32", создана пользователем Warstone, 31 авг 2011.

  1. Warstone

    Warstone New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2007
    Сообщения:
    39
    Вводная:
    Есть приложение (не мое), в которое, при старте приложения, инъектируется dll'ка (моя).
    Приложение большое, но нас интересует его маленькая часть.
    Приложение работает с 2-мя файлами... Один является индексным для другого.
    Приложение умеет работать с ними только в режиме чтения.
    Мне-же надо обновлять информацию в этих файлах в том случае, если приложение обратилось к конкретному куску данных (через индексный фаил).
    Надо каким-то образом перехватить факт обращения к памяти и по этому обращению выполнить свой код.

    Что известно:
    Можно перехватить и поменять маппинг файла, то есть заставить приложение работать с файлами и в режиме чтения. Более того, известен поинтер и размеры файлов.

    Собственно вопрос в том, как перехватить факт чтения данных из памяти?

    Пока что сам думаю: Накрывать этот кусок данных VirtualProtect'ом и использовать VEH для ловли ошибок, которые и будут сигналом к чтению, однако боюсь что это будет... не быстро... Так как с файлом работают довольно часто (несколько раз в секунду)
     
  2. ASMatic

    ASMatic New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2010
    Сообщения:
    233
    это не довольно часто = особо тупить не будет.
    по другому - захватывайте функи читающие данные.
    можно есчо установить хардверный бряк на доступ к указателю на память = атрибуты доступа к памяти менять постоянно не придётся, но тут есть свои камни (х_бряк то для треда только(
     
  3. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Warstone
    Пишем файловый фильтр, ловим Paging I/O.
     
  4. Warstone

    Warstone New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2007
    Сообщения:
    39
    Функции, читающиие данные, надо искать в коде, а этого не хотелось-бы, так как пока решение не зависит от кода приложения (перекомпиляция, в разумных пределах, не требует переделки этой припарки).

    Линки на маны на хардварные бряки и вообще почитать, можно?
     
  5. Warstone

    Warstone New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2007
    Сообщения:
    39
    man что, папа?
    Линки, дайте линки на почитать. Вы, наверняка, знаете лучше литературу чем человек, который этим еще не занимался(я).
     
  6. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    сделай самое простое на VirtualProtect вот и увидишь будет тормозить или нет)
     
  7. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Откровенно говоря, я никогда не видел нормальных книжек по написанию файловых фильтров. Если кто видел, кидайте ссылки, я и сам с удовольствием почитал бы. Я изучал эти аспекты фильтров по форумам и исходникам ядра и WDK. Из литературы могу посоветовать разве что статьи на сайте OSR Online, в частности, эти:

    - What is the difference between cached I/O, user non-cached I/O, and paging I/O?
    - What are the rules for my file system/filter driver for handling paging I/O? What about paging file I/O?
    - How is cache coherency handled when a file is opened for "ordinary" (cached) I/O and also opened memory mapped?
     
  8. ASMatic

    ASMatic New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2010
    Сообщения:
    233
    www.wasm.ru/article.php?article=debugreg
     
  9. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    книжка конечно старая 1997 года но в ней написано много чего по фаловой системе в целом, и фильтрам в частности Windows NT File System Internals, хотя думаю что она известна.
     
  10. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    Вставлю свои три копейки
    http://download.microsoft.com/download/e/b/a/eba1050f-a31d-436b-9281-92cdfeae4b45/filterdriverdeveloperguide.doc
     
  11. _derivative

    _derivative New Member

    Публикаций:
    0
    Регистрация:
    5 фев 2011
    Сообщения:
    8
    А ещё Вы можете обнулить регистр DS и обрабатывать Access Violations. Вот это будет реально тормозно.