LINUX.ORG.RU
ФорумTalks

Трансляция виртуальных адресов как тьюринг-полный язык

 


1

2

Вот очень странный и невероятно крутой хак: trapcc - вычисление без единой инструкции CPU.

Авторы продемонстрировали, что механизм трансляции адресов на архитектуре x86 обладает полнотой Тьюринга, т.е. с его помощью можно реализовать любой алгоритм. С помощью хитрой настройки различных контрольных таблиц, которыми пользуется процессор, они вводят процессор в состояние, в котором он не может выполнить ни одной инструкции, т.к. непрерывно происходят исключения, но разные исключения в зависимости от приготовленных данных - и таким образом процессор вычисляет!

Известно, что одной инструкции условного перехода по вычитанию (вычисли a = a-b, и если это меньше или равно нуля, перейди в c) достаточно для Тьюринг-полноты. В этом хаке такая инструкция симулируется с помощью последовательности page faults (от невозможности загрузить данные), которая заканчивается double fault (когда указатель на стек уменьшается ниже нуля).

Несколько более подробное объяснение - в этом комментарии.

Любопытно, что ни один существующий эмулятор x86 не мог правильно запустить этот хак, потому что он опирается на слишком извращенную конфигурацию контрольных таблиц, и на тонкие нюансы поведения процессора в этой извращенной конфигурации. В итоге они смогли подстроиться под эмулятор Bochs.

Как ни странно, у всего этого даже есть практические применения, правда, в области, которая ничего хорошего и полезного миру не приносит - обнаружение того, что программа бежит под отладчиком или в виртуальной машине. Ну а так - это просто неимоверно круто и красиво.

(c) http://avva.livejournal.com/2570893.html

есть практические применения, правда, в области, которая ничего хорошего и полезного миру не приносит

Ну ты понел

netcat ★★
()

обнаружение того, что программа бежит под отладчиком или в виртуальной машине. Ну а так - это просто неимоверно круто и красиво.

Блин... Люди старались, делали эмулятор. А тут появляется хитрый алгоритм из за которого программа сможет вычислить что она в виртуалке и не запуститься.

rezedent12 ☆☆☆
()
Ответ на: комментарий от rezedent12

Что-то мне подсказывает, что эмуляторы быстро допилят. :)

geekless ★★
() автор топика
Ответ на: комментарий от rezedent12

которого программа сможет вычислить что она в виртуалке и не запуститься.

Такое уже давно реализовано :)

Satan_Klaus ★★
()
Ответ на: комментарий от rezedent12

И так есть 100500 способов это сделать. Не нужно для этого извращаться ТАК.

Deleted
()
Ответ на: комментарий от rezedent12

Похоже мы получили Acid2 для эмуляторов. :)

atrus ★★★★★
()

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

XVilka ★★★★★
()

Как ни странно, у всего этого даже есть практические применения

Первое практическое следствие из этого — невозможность написать корректный анализатор этих самых таблиц.

ival ★★
()

обнаружение того, что программа бежит под отладчиком или в виртуальной машине

Мешает ли что-то, кроме ленивости разработчиков и малой нужности, допилить виртуальные машины и эмулирующие отладчики? (неэмулирующие отладчики, как я понимаю, не ломаются)

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.