Такая мысль появилась. Известно, что можно использовать кэш в качестве памяти (атрибут Write Back, заполнение линеек кэша, последующая установка флага CR0.CD – если правильно понимаем). Получаем ситуацию, при которой до инвалидации линеек для чтения и записи соответсвующих адресов будет использоваться исключительно кэш. Тогда – существует ли такая комбинация атрибутов и инструкций, при которых фетч кода будет производиться из кэша, а запись будет осуществляться вот как-нибудь так мимо него? Или это вообще невозможно?
Не уловил смысл задачи. Вообще конечно можно разместить код в кэшируемой памяти, а данные в некэшируемой. Только, как мне кажется, это совсем не то, что вам нужно. Возможно речь идет о самомодифицирующемся коде? Т.е. выполняется из кэша одно, а в памяти по этим адресам (после записи) уже совсем другое?
medstrax1 Задача та же – заполнить всю память. Да, в некотором роде самомодифицирующийся код – выполнять код с тем, чтобы извне по кодовым адресам можно было бы прочитать данные, отличные от выполненных инструкций. Awk Нет. Shadow Walker использует десинхронизацию TLB: при выполнении кода виртуальному адресу подставляется один физический фрейм, а при чтении данных – другой. Фрейм с кодом там по-прежнему присутствует в физической памяти.
Не применительно к именно этой задаче, тем не менее - "выполнять код с тем, чтобы извне по кодовым адресам можно было бы прочитать данные, отличные от выполненных инструкций" invd в помощь. По сути, код модифицируется, исполняется, инвалидит кэш. По итогам - в памяти, после инвалидации кэша, совсем не то, что фактически выполнялось. Естесно ринг0 ))
medstrax1 С таким же успехом можно и в юзермоде модифицировать код, выполнить, а затем восстановить прежний Sol_Ksacap Если запись будет производиться обычным образом через процессор (а не через DMA, GPU и т.п.), то наверняка невозможно, т.к. при любой записи через процессор, включая movnt, первым делом проверяется наличие соотв.адресов в кэшах всех уровней всех ядер\процессоров, и при необходимости выполняются соотв-е действия по синхронизации содержимого кэшей и ОЗУ
чисто идея без реализации поручить это дело какому нибудь чипу типа видео процессора у которого есть своя память никак не связанная с рам и пусть он по дма хреначит
Естественно. В общем случае смысла в использовании invd конечно нет. Однако, как одно из средств против отладки, трассировки и эмуляции, прием неплох. Поясню, при пошаговом выполнении к примеру, модифицированная инструкция с ненулевой вероятностью может быть "вытеснена" из кэша в память. Чего при нормальном исполнении естесно не произойдет.