Вопрос по поводу исключений в x64

Issues related to VMProtect
V.I.R.U.S.
Posts: 24
Joined: Sun Apr 03, 2011 5:12 am

Вопрос по поводу исключений в x64

Post by V.I.R.U.S. »

Уважаемый Admin, Вы, в одной из тем писали:
"В настоящий момент в х64 приложениях не поддерживается обработка исключений, все остальное работает."

Что по этим подразумевается?
Потихоньку хочу осваивать 64 бита, начал с проверки всего так сказать технического инструментария...
Сперва решил проверить, как раз обработку исключений, ибо это часто очень важно!

В Delphi XE4 набросал тестовое приложение, как в 32 битном режиме, так и в 64 битном.
Приложение незамысловатое, 3 кнопки:
1) Показ простого Show Message
2) Простая ошибка TMemoryStream.WriteBuffer в несозданном объекте TMemoryStream
3) Вызов кнопки номер 2, но в блоке try ... except, с обработкой on E: Exception do

Кроме этого, включил EurekaLog 7 для отображения детальной информации об ошибках, стеке, и.т.д.
В 64 битном режиме, EL не показывает Asm код участка с ошибкой, видимо такие особенности.

И все работает!

Демки:
http://floomby.ru/s1/xY4y4w
Admin
Site Admin
Posts: 2584
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Вопрос по поводу исключений в x64

Post by Admin »

А вот теперь попробуйте завиртуализировать функцию, в которой возникает исключение.
V.I.R.U.S.
Posts: 24
Joined: Sun Apr 03, 2011 5:12 am

Re: Вопрос по поводу исключений в x64

Post by V.I.R.U.S. »

Admin wrote:А вот теперь попробуйте завиртуализировать функцию, в которой возникает исключение.
Сейчас попробую!
V.I.R.U.S.
Posts: 24
Joined: Sun Apr 03, 2011 5:12 am

Re: Вопрос по поводу исключений в x64

Post by V.I.R.U.S. »

Да... И правда не работает... Приложение крашется...

Может быть есть какие то советы? Ведь падать на любой ошибке, даже в блоке try...except это печально...

А вообще...
Это временно? В будущем есть ли планы поправить ситуацию?
Admin
Site Admin
Posts: 2584
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Вопрос по поводу исключений в x64

Post by Admin »

Общая ситуация ухудшается еще тем, что при виртуализации любой функции вверх по стеку вызовов при возникновении исключения процесс будет падать, т.к. механизм работы исключений в х64 очень сильно отличается от х32. Каждая функция имеет информацию о регионах адресов, в которых она живет, а также дополнительную информация по раскрутке стека. Дак вот при виртуализации кода исключение возникает уже совершенно по другому адресу, для которого система не может найти никакой информации ни об обработчике исключений, ни об информации по раскрутке стека. Когда будет сделана полноценна обработка исключений - неизвестно. Нужно проводить исследования.
V.I.R.U.S.
Posts: 24
Joined: Sun Apr 03, 2011 5:12 am

Re: Вопрос по поводу исключений в x64

Post by V.I.R.U.S. »

Есть ли надежда, что в VMProtect 3 ситуация наладиться?

Дело в том, что исключения в любом случае возникают в приложении, очень часто такие ошибки просто обрабатываются в блоке try...except и приложение нормально работает дальше...
Если приложение отваливается на любой ошибке, нет речи о поддержке 64 бит в VMProtect. Это скорее "баловство".
Соответственно это
Image
можно и убрать...

P.S.
Я очень доволен протектором в 32 битных приложениях. Мощный и удобный.
Но очень сильно растроился, когда хотел было осваивать 64 бита, а тут такое...
И что самое обидное, у ближайшего конкурента такая поддержка х64 есть... :( :cry: (сам проверил на демо-версии сегодня)

P.S.S.
Желаю удачи в исследованиях в этой области! Чтобы все получилось достаточно быстро и "малой кровью"!
Admin
Site Admin
Posts: 2584
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Вопрос по поводу исключений в x64

Post by Admin »

А кто у нас ближайший конкурент если не секрет?
V.I.R.U.S.
Posts: 24
Joined: Sun Apr 03, 2011 5:12 am

Re: Вопрос по поводу исключений в x64

Post by V.I.R.U.S. »

Admin wrote:А кто у нас ближайший конкурент если не секрет?
Themida\WinLicense
Admin
Site Admin
Posts: 2584
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Вопрос по поводу исключений в x64

Post by Admin »

Насколько я знаю у Themida не поддерживаются исключения даже в х32. Думал что-то изменилось в последних версиях - ожидания не оправдались, падает как в х64 так и в х32.

Код на Delphi:

Code: Select all

procedure TForm19.Button1Click(Sender: TObject);
var I:Integer;
begin
  {$I VM_Start.inc};
  I := Random(100);
  if (I <> -1) then
    I := 0;
  try
    Application.MessageBox('try', '', MB_OK + MB_ICONSTOP);
    Caption:=IntToStr(Round(500/I));
  except
    Application.MessageBox('catch', '', MB_OK + MB_ICONSTOP);
  end;
  Application.MessageBox('end', '', MB_OK + MB_ICONSTOP);
  {$I VM_End.inc};
end;
Код на C++:

Code: Select all

int _tmain(int argc, _TCHAR* argv[])
{
	VMStart();

	int i = __rdtsc();
	if (i != -1)
		i = 0;

	printf("try 1\n");
	try {
		printf("%d\n", 500 / i);
	} catch(...) {
		printf("catch 1\n");
	}
	printf("end 1\n");

	VMEnd();

	return 0;
}
Если приложение отваливается на любой ошибке, нет речи о поддержке 64 бит в VMProtect. Это скорее "баловство".
Следуя вашей логике Themida - это "баловство" даже для х32 кода.
V.I.R.U.S.
Posts: 24
Joined: Sun Apr 03, 2011 5:12 am

Re: Вопрос по поводу исключений в x64

Post by V.I.R.U.S. »

Досконально протестировал демки Themida. Как 32 битную, так и 64 битную... (Они отдельно скачиваются)

Знаете что самое интересное!
64 бита действительно работает, правда с небольшими оговорками, блок try..except не включается, а показывается сообщение об ошибке.

32 бита же, при водит к крашу...

Код компилировал в Delphi XE4.

Вот исходник и бинарники.
http://rghost.ru/47136111
Admin
Site Admin
Posts: 2584
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Вопрос по поводу исключений в x64

Post by Admin »

32 бита же, при водит к крашу...
Ваш тестовый х64 тоже крешится. Ну и какой он нафиг конкурент? :))
V.I.R.U.S.
Posts: 24
Joined: Sun Apr 03, 2011 5:12 am

Re: Вопрос по поводу исключений в x64

Post by V.I.R.U.S. »

Admin wrote:
32 бита же, при водит к крашу...
Ваш тестовый х64 тоже крешится. Ну и какой он нафиг конкурент? :))
Проверил на виртуальной Windows 8.1 x64 и основной Windows 7 x64 - 64 битное приложение, скомпилированное в 64 битной фемиде - работает!

P.S.
Если бы я считал достойным конкурентом продукцию Oreans, я бы не взял VMProtect. И не переживал бы за него. Но какую-то конкуренцию он составляет, а лучше него протекторов я не знаю. Всякие ASProtect не серьезно...
Admin
Site Admin
Posts: 2584
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Вопрос по поводу исключений в x64

Post by Admin »

Проверил на виртуальной Windows 8.1 x64 и основной Windows 7 x64 - 64 битное приложение, скомпилированное в 64 битной фемиде - работает!
На моей Windows 7 x64 не работает - очередной минус продукту.
V.I.R.U.S.
Posts: 24
Joined: Sun Apr 03, 2011 5:12 am

Re: Вопрос по поводу исключений в x64

Post by V.I.R.U.S. »

Admin wrote:
Проверил на виртуальной Windows 8.1 x64 и основной Windows 7 x64 - 64 битное приложение, скомпилированное в 64 битной фемиде - работает!
На моей Windows 7 x64 не работает - очередной минус продукту.
А Вы готовый бинарник использовали или заново собрали в фемиде? Дело в том, что демо-версия приложения криптует так, что на другом пк не работает программа и отображается окно что типа приложение собрано в демо-версии и работает только на том пк.
Admin
Site Admin
Posts: 2584
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Вопрос по поводу исключений в x64

Post by Admin »

Обрабатывал заново демкой с оффсайта (2.2.3.0)
Post Reply