Вычисление без единой инструкции процессора
Это очень круто, цитирую почти полностью:
Авторы продемонстрировали, что механизм трансляции адресов на архитектуре x86 обладает полнотой Тьюринга, т. е. с его помощью можно реализовать любой алгоритм. С помощью хитрой настройки различных контрольных таблиц, которыми пользуется процессор, они вводят процессор в состояние, в котором он не может выполнить ни одной инструкции, т. к. непрерывно происходят исключения, но разные исключения в зависимости от приготовленных данных — и таким образом процессор вычисляет!
Известно, что одной инструкции условного перехода по вычитанию (вычисли
a=a-b, и если это меньше или равно нуля, перейди в c) достаточнодля Тьюринг-полноты. В этом хаке такая инструкция симулируется с помощью последовательности page faults (от невозможности загрузить данные), которая заканчивается double fault (когда указатель на стек уменьшается ниже нуля).Любопытно, что ни один существующий эмулятор x86 не мог правильно запустить этот хак, потому что он опирается на слишком извращенную конфигурацию контрольных таблиц, и на тонкие нюансы поведения процессора в этой извращенной конфигурации.
У всего этого даже есть практические применения, правда, в области, которая ничего хорошего и полезного миру не приносит — обнаружение того, что программа бежит под отладчиком или в виртуальной машине.
Таким образом вычисление происходит без единой инструкции процессора! Речь идёт о проекте trapcc, на Ютьюбе есть видео, где запущена известная игра «Жизнь», запрограммированная таким способом (код специально адаптирован под эмулятор Bochs).
Комментарии 3
Лучший комментарий:
(Это аппаратная версия философии Брэйнфак)