lea eax, [ebx+18h] - это как раз указатель на “test string0”, но он берется почему то относительно адреса “fake string”. В результате обработки вмпротектом все неявные ссылки на “fake string” автоматически преобразуются в VMProtectDecryptStringW и поэтому по смещениям ebx+XXXX лежит уже мусор а не “test stringX”.
Попробуйте поиграть настройками компилятора чтобы он изменил алгоритм кодогенерации.
Специально пример был сделан, чтобы сохранились такие ссылки. Проблема конечно решается, нужно отключить ВСЮ оптимизацию.
Я так понимаю, всё равно гарантий нет, что защищенная программу будет работать, как оригинальная, т.к. VMProtect ориентируется на обобщённое поведение компиляторов?
ПС: 3 недели ушло, чтобы выявить причину падений программы у 15% покупателей. Искали в программе баг, которого не было.
при этом уже сэкономив немного байт, раз мы тут что-то оптимизируем )
P.S. После выхода XE2 смотрел кодогенерацию для MacOS - тихий ужас. После этого решил, что с продуктов фирмы Embarcadero надо валить, причем чем раньше тем лучше ) Полностью перелез на MSVC (там сейчас пишется 3-ий вмпротект практически с нуля) и доволен как слон. Для GUI использую Qt - просто на голову выше VCL. К слову сказать оптимизация у MSVC просто охренительна и Embarcadero скорее всего уже никогда (судя по финтам ушами в XE3) не догонит Microsoft по качеству кода.