Не пробовал, поскольку для этого придётся создавать дополнительные таблицы для страничной адресации, я же пока имею лишь необходимый минимум (4 таблицы, первые 2 мегабайта спроецированы на физ. память 1:1).
Специально, чтобы убедиться, я пробовал читать ассемблерными вставками asm(«mov ...»), гарантированно 32-битные инструкции. Кажется, проблема не в этом.
ммм, мне кажется, здесь имеются в виду простые mov, просто сами адреса регистров выравнены по 16-байт (0h в конце). Там же в спеке, кажется, читал упоминание, что не пользоваться ничем экзотическим типа SSE, иначе результат не определён… Может, я чего-то не знаю…
Intel® 64 and IA-32 Architectures
Software Developer’s Manual
CHAPTER 6
INTERRUPT AND EXCEPTION HANDLING
Переключение стека предусмотрено (на кольцо с не меньшим приоритетом) — адрес стека берётся из TSS. А для x86_64 переключение стека вообще единственно рекомендовано (через IST), иначе будет портиться red zone.
К сожалению, в asm транслируется уже с cfi-секциями. Можно, конечно, вычищать их из файла перед трансляцией, но уж больно костыльно это. Не вериться, что GCC нельзя заставить продуцировать голые инструкции.
Да в том то и дело, что обрабатывающему алгоритму не нужно знать, что он делает, важно чтобы владелец ключа мог расшифровать и получить результат такого компьютинга. Это как хранение данные без доверия месту хранения, только вместо этого компьютинг.
Гипотетически, можно представить некоторый алгоритм обрабатывающий зашифрованый код и зашифрованные данные таким образом, что выходные данные генерируются в зашифрованном виде. Т.е. алгоритм сам не знает что он обрабатывает, просто преобразует по заданному набору правил. Своего рода, асимметричный компьютинг. Другое дело, что это скорее всего невозможно, но очень бы хотелось…
Специально, чтобы убедиться, я пробовал читать ассемблерными вставками asm(«mov ...»), гарантированно 32-битные инструкции. Кажется, проблема не в этом.