История изменений
Исправление Barracuda72, (текущая версия) :
Вроде, разные системы виртуализации используют
Тут ХЗ, я не спец. Помню, на заре x86_64 был кипиш по поводу того, что из-за отказа от сегментации не работал VirtualBox в режиме софтварной эмуляции c 64-битным гостем. Потом AMD сегментацию частично вернули, что позволило реализовать полностью софтварную виртуализацию. Intel так этого и не сделали. Но это было давно и я могу ошибаться.
Я исхожу из того, что самый простой «результат» исполнения - да/нет
Результат операции сравнения на x86 - изменение регистра EFLAGS/RFLAGS (ЕМНИП, сравнение выполняется как вычитание), которое, естественно, не фиксируется ввиду непрохождения инструкцией проверок защиты. Где там промежуточный результат летает - да пес его знает. Я понял из статьи на cyber.wtf то, что технически можно по времени отклика детектировать наличие в виртуальном адресном пространстве ядра тех или иных диапазонов адресов, например, но понять, что в них лежит, вроде бы как напрямую нельзя - можно только попытаться сконструировать некоторую последовательность команд, типа
mov $KernelAddressToTest, %rax
mov 0x0(%rax), %rbx
mov 0xSomeUserSpaceAddress(%rbx), %rax
и, несмотря на невалидность второй инструкции, третья все равно будет выполнена с очень большой вероятностью, хоть ее результаты, как и результаты второй, будут отброшены на дальнейших стадиях конвейера. Грамотным образом сконструировав юзерспейс по времени отклика кэша первого уровня нам предоставляется возможность понять, чего же там такого мы получили при выполнении второй инструкции. Впрочем, это все мои догадки и ни на какую истину я не претендую и даже не пытаюсь.
Действительно, чем гадать - лучше подождать подробностей.
Исходная версия Barracuda72, :
Вроде, разные системы виртуализации используют
Тут ХЗ, я не спец. Помню, на заре x86_64 был кипиш по поводу того, что из-за отказа от сегментации не работал VirtualBox в режиме софтварной эмуляции c 64-битным гостем. Потом AMD сегментацию частично вернули, что позволило реализовать полностью софтварную виртуализацию. Intel так этого и не сделали. Но это было давно и я могу ошибаться.
Я исхожу из того, что самый простой «результат» исполнения - да/нет
Результат операции сравнения на x86 - изменение регистра EFLAGS/RFLAGS (ЕМНИП, сравнение выполняется как вычитание), которое, естественно, не фиксируется ввиду непрохождения инструкцией проверок защиты. Где там промежуточный результат летает - да пес его знает. Я понял из статьи на cyber.wtf то, что технически можно по времени отклика детектировать наличие в виртуальном адресном пространстве ядра тех или иных диапазонов адресов, например, но понять, что в них лежит, вроде бы как напрямую нельзя - можно только попытаться сконструировать некоторую последовательность команд, типа
mov $KernelAddressToTest, %rax
mov 0x0(%rax), %rbx
mov 0xSomeUserSpaceAddress(%rbx), %rax
и, несмотря на невалидность второй инструкции, третья все равно будет выполнена с очень большой вероятностью. Грамотным образом сконструировав юзерспейс по времени отклика кэша первого уровня нам предоставляется возможность понять, чего же там такого мы получили при выполнении второй инструкции. Впрочем, это все мои догадки и ни на какую истину я не претендую и даже не пытаюсь.
Действительно, чем гадать - лучше подождать подробностей.