Возвращение старого режима расположения кода ВМ
Posted: Tue Sep 12, 2023 12:26 pm
В старой версии (сужу по v3.5.1, не знаю когда это поведение поменялось) весь код ВМ располагался в секциях VMProtect, куда управление из защищаемых функций попадало через простые джампы. То есть есть весь код ВМ ссылался лишь сам на себя и на свои секции.
В последней версии (v3.8.4.1798) некоторая часть ВМ располагается прямо на месте защищаемых функций. На бумаге все хорошо, оптимизируется используемое пространство, но есть одно но в текущем положении дел: код ВМ из одной секции может бесконтрольно ссылаться на код ВМ из другой секции.
У меня это вылилось в то, что программа теперь крашится при доступе к секциям, которые были зачищены случайными байтами + помечены как NX, в те моменты когда таких доступов уже быть не должно. Я так понимаю, ВМ переиспользует различный код, чтоб не плодить копии по программе, что опять же хорошо, но лучше бы эту оптимизацию сделать только в рамках одной секции, либо же хотя бы учитывать discardable-флаг на секциях и не ссылаться на них из других секций.
Не знаю, что сделать проще, но просьба либо сделать чекбокс для использования старого режима (в котором весь код ВМ был лишь в секциях .vmp, а из остальных секций были джампы), либо поправить логику работы инлайнинга.
В последней версии (v3.8.4.1798) некоторая часть ВМ располагается прямо на месте защищаемых функций. На бумаге все хорошо, оптимизируется используемое пространство, но есть одно но в текущем положении дел: код ВМ из одной секции может бесконтрольно ссылаться на код ВМ из другой секции.
У меня это вылилось в то, что программа теперь крашится при доступе к секциям, которые были зачищены случайными байтами + помечены как NX, в те моменты когда таких доступов уже быть не должно. Я так понимаю, ВМ переиспользует различный код, чтоб не плодить копии по программе, что опять же хорошо, но лучше бы эту оптимизацию сделать только в рамках одной секции, либо же хотя бы учитывать discardable-флаг на секциях и не ссылаться на них из других секций.
Не знаю, что сделать проще, но просьба либо сделать чекбокс для использования старого режима (в котором весь код ВМ был лишь в секциях .vmp, а из остальных секций были джампы), либо поправить логику работы инлайнинга.