Как заполнить всю память ?

Тема в разделе "WASM.A&O", создана пользователем Medstrax, 6 июн 2010.

  1. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Такая мысль появилась. Известно, что можно использовать кэш в качестве памяти (атрибут Write Back, заполнение линеек кэша, последующая установка флага CR0.CD – если правильно понимаем). Получаем ситуацию, при которой до инвалидации линеек для чтения и записи соответсвующих адресов будет использоваться исключительно кэш. Тогда – существует ли такая комбинация атрибутов и инструкций, при которых фетч кода будет производиться из кэша, а запись будет осуществляться вот как-нибудь так мимо него? Или это вообще невозможно?
     
  2. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Не уловил смысл задачи. Вообще конечно можно разместить код в кэшируемой памяти, а данные в некэшируемой. Только, как мне кажется, это совсем не то, что вам нужно.
    Возможно речь идет о самомодифицирующемся коде? Т.е. выполняется из кэша одно, а в памяти по этим адресам (после записи) уже совсем другое?
     
  3. Awk

    Awk New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2006
    Сообщения:
    8
    Sol_Ksacap

    Вот это не похоже на то, что нужно - http://www.phrack.org/issues.html?issue=63&id=8 ?
     
  4. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    medstrax1
    Задача та же – заполнить всю память. Да, в некотором роде самомодифицирующийся код – выполнять код с тем, чтобы извне по кодовым адресам можно было бы прочитать данные, отличные от выполненных инструкций.

    Awk
    Нет. Shadow Walker использует десинхронизацию TLB: при выполнении кода виртуальному адресу подставляется один физический фрейм, а при чтении данных – другой. Фрейм с кодом там по-прежнему присутствует в физической памяти.
     
  5. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Не применительно к именно этой задаче, тем не менее -
    "выполнять код с тем, чтобы извне по кодовым адресам можно было бы прочитать данные, отличные от выполненных инструкций"
    invd в помощь.
    По сути, код модифицируется, исполняется, инвалидит кэш. По итогам - в памяти, после инвалидации кэша, совсем не то, что фактически выполнялось.
    Естесно ринг0 ))
     
  6. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    medstrax1
    С таким же успехом можно и в юзермоде модифицировать код, выполнить, а затем восстановить прежний ;)

    Sol_Ksacap
    Если запись будет производиться обычным образом через процессор (а не через DMA, GPU и т.п.), то наверняка невозможно, т.к. при любой записи через процессор, включая movnt, первым делом проверяется наличие соотв.адресов в кэшах всех уровней всех ядер\процессоров, и при необходимости выполняются соотв-е действия по синхронизации содержимого кэшей и ОЗУ
     
  7. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.615
    Адрес:
    Russia
    чисто идея без реализации
    поручить это дело какому нибудь чипу типа видео процессора у которого есть своя память никак не связанная с рам и пусть он по дма хреначит
     
  8. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Естественно. В общем случае смысла в использовании invd конечно нет. Однако, как одно из средств против отладки, трассировки и эмуляции, прием неплох. Поясню, при пошаговом выполнении к примеру, модифицированная инструкция с ненулевой вероятностью может быть "вытеснена" из кэша в память. Чего при нормальном исполнении естесно не произойдет.