Можно настроить ARM MMU на выполнение кода, но не на чтение.

Я хотел бы знать, можно ли установить разрешения для записи таблицы страниц для MMU ARM7 (в частности, Cortex A8), чтобы выполнение кода со страницы было разрешено, но чтение не разрешено.

Если разрешения являются ортогональными, вы можете подумать, что если XN (выполнять никогда) не установлено, это выполнение будет разрешено независимо от того, разрешено ли чтение.

Конечно, некоторый код ARM считывает сам себя во время выполнения (например, для получения литералов, которые хранятся сразу за концом функции), такой код вряд ли будет работать.

Если код, который вы пытались выполнить, не выполнял каких-либо операций чтения из самого себя (точнее, со страницы с отключенным чтением), будет ли код выполняться, как ожидалось, или вы получите прерывание данных (или другое) исключение?


person Tom Hennen    schedule 26.07.2014    source источник
comment
Не совсем уверен, что понимаю. Процессор должен прочитать раздел кода, чтобы получить инструкции, которые должны быть выполнены. Как вы можете отключить разрешение на чтение и по-прежнему выполнять этот код на процессоре (т. е. как иначе он попадет внутрь ЦП)?   -  person barak manos    schedule 26.07.2014
comment
Если бы система использовала аппаратную архитектуру (отдельные пути для кода и данных), что, как я полагаю, использует ARM, то вполне возможно, что доступ к памяти во время работы процессора будет использовать другие разрешения, чем доступ к памяти для доступа к данным. Продвижение, обновление ПК может иметь другую семантику, чем, например, LDR.   -  person Tom Hennen    schedule 26.07.2014
comment
Да, но после того, как ПК увеличивается, следующую инструкцию все равно необходимо извлечь (т. е. нужно прочитать адрес памяти, указанный ПК).   -  person barak manos    schedule 26.07.2014
comment
Согласованный. Мне просто интересно, может ли процессор (который знает, почему он выполняет одно чтение по сравнению с другим) через MMU разрешить чтение для получения инструкции, но не разрешить доступ к этой странице каким-либо другим данным. В некотором смысле это похоже на то, как реализован XN. Инструкция извлекается, как и любое другое чтение, но затем выполняется. MMU должен знать, является ли намерением выполнение инструкции, иначе он никогда не сможет генерировать исключение, когда установлен XN.   -  person Tom Hennen    schedule 26.07.2014


Ответы (1)


Казалось бы, ответ нет.

Из Справочного руководства по архитектуре ARM® ARMv7-A и ARMv7-R edition, раздел B3.7.2.

Процессор может выполнять инструкции из области памяти, только если права доступа для его текущего состояния разрешают доступ для чтения, а бит XN установлен в 0.

person Tom Hennen    schedule 26.07.2014