Проблема с 32-х битной Linux

Возникла проблема такого плана:

  1. Приложение падает с ошибкой Trace/breakpoint trap (core dumped)
  2. Судя по выводимой отладочной информации, падение происходит до вызова единственной защищаемой функции.
  3. Ошибка повторяется только под 32-битных linux.
  4. Без защиты - всё хорошо. Если снять защиту с функции, то тоже всё хорошо.

В аттаче пример приложения + проект (логика в примере отсутствует, но хорошо характеризует проблему)
Использовалась версия протектора Linux 3.1.2 build 886
test32.zip (1.71 MB)

VMProtect не умеет определять функции с атрибутом “noreturn”:

0804AC94 call 0806E040 → __stack_chk_fail_local
0804AC99 lea esi, [esi+00000000]
0804ACA0 push edi ← test1()
0804ACA1 push esi
0804ACA2 push ebx

Поэтому в тело test2 затесался и test1

Вылечилось добавлением опции GCC -fno-reorder-blocks
Интересно только, насколько корректно такое решение?

Еще бы знать что эта хрень делает :slight_smile:)

Продолжаем разговор )
Очередной пример, вызывающий падение только в 32-х битных никсах.
exception.zip (1.45 MB)

А оригинальный бинарник то где?

Прошу прощения, прикладываю.
original_bin.zip (3.62 KB)

Проверяйте (3.1.2.896):
http://vmpsoft.com/files/VMProtectDemo_x64.tar.gz

Продолжаем ))
Очередной тестовый пример, вызывающий падение.
Проверяли с последней версией защиты (3.1.2.896)
testExcept.zip (2.84 MB)

Ну что, есть какие-нибудь подвижки в нашем вопросе?

Пока нет.

Проверяйте (3.1.2.924):
http://vmpsoft.com/files/VMProtectDemo_x64.tar.gz

Нашли очередную проблему в 32-х битных никсах. В аттаче пример ее воспроизводящий.
Защищена одна функция. Если убрать защиту с этой функции, то приложение не падает.
test.tar.gz (1.47 MB)
Также хотел спросить, есть ряд слабых машин, где запуск защищенного и упакованного приложения занимает очень много времени. Это как то ускорить можно?

Поднимаем тему.
Прикладываю упрощенный вариант примера, где проблема воспроизводится
Предположительно проблема возникает из-за команды “jmp *%eax”. По крайней мере, если после упрощения кода компилятор перестаёт её добавлять, то автозащита перестаёт падать.
test2.zip (1.46 MB)

Предположительно проблема возникает из-за команды “jmp *%eax”.

Это SWITCH, который не распознается ни вмпротектом, ни идой:

08048A22 mov ebp, ecx
08048A24 lea edi, [ecx*4+00000000]
...
08048A30 cmp ebp, 05
08048A33 jnbe 08048A50 ↓
08048A35 mov eax, [ebx+edi-00001484]
08048A3C add eax, ebx
08048A3E jmp eax

По адресу 08048B7C лежит таблица со смещениями на 6 элементов. Падает конечно из-за этого.

И что делать в таком случае?

Исключить эту функцию из протекта?