Error in virtual machine under russian Windows

Добрый день.

Проблема в следующем. Имеется драйвер, часть функций которого защищены с помощью VMProtect 1.2.2
Ощущение такое, что в некоторый момент виртуальная машина вылетает и код, который должен исполняться под виртуальной машиной, выполняется как обычный код, что рано или поздно приводит к возникновению BSOD (чаще всего ошибки связаны с чтением или записью в произвольный регион памяти).
Что интересно - ошибки случаются только под русскими версиями (не важно Win 2000, Win XP, Win 2003) и пока ни разу не проявились под английской версией.
В history VMProtect я не встретил никаких упоминаний на подобные проблемы. Исходя из этого вопрос - известна ли подобная проблема и если да, то была ли она исправлена?

Скорее всего проблема связана с многопоточностью. В версиях до 1.24 для драйверов рекомендовалось указывать процедуру выделения памяти для нужд исполнителя. Начиная с версии 1.24 VMProtect полностью поддерживает многопоточность без каких либо дополнительных действий со стороны разработчика.

Спасибо за ответ. Ситуация когда несколько процедур может выполняться “одновременно” под виртуальной машиной, что может трактоваться как многопоточность, действительно может иметь место.
Просто несколько насторожил тот факт, что в основном все происходит под русской версией windows

Что касается кодировки - у Вас на форуме установлена кодировка ISO-8859-1, что вероятно и приводит к проблемам. Попробуйте установить 1251 или UTF8. Сейчас чтобы прочесть сообщения на форуме мне приходится на каждой странице переключать кодировку на 1251 вручную.

Если можно какую-либо ссылку на источник, где освещен вопрос как именно должна выглядеть процедура выделения памяти?
В статье http://polytech.ural.ru/vmprotect.htm этот вопрос не рассматривается…

Старые версии VMProtect (ниже 1.23) больше не поддерживаются, т.к. проект стал полностью коммерческим.

В своем профиле выберите русский язык, тогда форум будет отображаться в правильной кодировке.

Ну не поддерживается, так не поддерживается. Разобраться с этой процедурой заняло минут 15…
В любом случае спасибо за рекомендацию.
Однако не уверен что поможет. Баг репорты продолжают сыпаться - и все без исключения под русской версией windows. Если бы причина была в выделении памяти, то ошибка с равной вероятностью проявлялась бы как под русской так и под английской версиями.

Ну не поддерживается, так не поддерживается. Разобраться с этой процедурой заняло минут 15…

Процедура выделения памяти должна работать в двух режимах:

  1. Выделение памяти: входной параметр ECX - размер блока в байтах; выходной параметр EAX - указатель на выделенный блок.
  2. Освобождение памяти: входные параметры ECX=0, EDX - указатель на высвобождаемый блок.

Однако не уверен что поможет. Баг репорты продолжают сыпаться - и все без исключения под русской версией windows.

Непонятно - вы уже пробывали защиту с внешним выделением памяти или нет? :slight_smile:)

P.S. В любом случае нельзя исключать причину возникновения ошибки в самом драйвере (в алгоритме работы), а не в защите в виде VMProtect.

P.P.S. Вы можете попробывать защитить свой драйвер последней демо версией, правда в силу ограничений демки можно защитить всего одну процедуру, но для тестов я думаю этого вполне хватит.

Спасибо - я же написал что уже разобрался с процедурой - для того отладчики и придумали :slight_smile:)
Пока еще не пробовал, но постараюсь сегодня сделать.