1. Если вы включаете всю процедуру в проект и внутри этой процедуры включаете еще и сам маркер, то у вас как раз возникнет вот такая ошибка:
Code:
[Ошибка] VMProtectMarker "xxx".00424Bxx: Адрес используется процедурой "__fastcall xxx(System::TObject *)"
Из-за того, что один и тотже код вы хотите обработать по-разному.
Со вложенными маркерами немного другая ситуация. Вложенность определяется сразу на этапе анализа файла:
Code:
VMProtectBegin('1');
...
VMProtectBegin('2');
...
VMProtectEnd;
...
VMProtectEnd;
В таком варианте протектор вам скажет, что VMProtectBegin('1') и второй VMProtectEnd непарные и в проект вы сможете включить только VMProtectMarker "2".
Чтобы решить проблему с критическим циклом внутри завиртуализированной процедуры, то тут есть 2 варианта:
1. Вынести цикл в отдельную процедуру
2. Разбить все тело процедуры на несколько маркеров:
Code:
begin
VMProtectVirtualizationBegin('start');
...
VMProtectEnd;
VMProtectMutationBegin('cycle');
...
// тело цикла
...
VMProtectEnd;
VMProtectVirtualizationBegin('end');
...
VMProtectEnd;
end;
2. Я думаю так будет нагляднее:
Quote:
Оборачивать каждый маркер в #ifdef vmprot ... #endif ?
3. VMProtectLicense.ini не используется в SE.