Page 1 of 2
Вопрос по поводу исключений в x64
Posted: Sun Jun 30, 2013 9:06 am
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
Re: Вопрос по поводу исключений в x64
Posted: Sun Jun 30, 2013 9:35 am
by Admin
А вот теперь попробуйте завиртуализировать функцию, в которой возникает исключение.
Re: Вопрос по поводу исключений в x64
Posted: Sun Jun 30, 2013 9:39 am
by V.I.R.U.S.
Admin wrote:А вот теперь попробуйте завиртуализировать функцию, в которой возникает исключение.
Сейчас попробую!
Re: Вопрос по поводу исключений в x64
Posted: Sun Jun 30, 2013 9:57 am
by V.I.R.U.S.
Да... И правда не работает... Приложение крашется...
Может быть есть какие то советы? Ведь падать на любой ошибке, даже в блоке try...except это печально...
А вообще...
Это временно? В будущем есть ли планы поправить ситуацию?
Re: Вопрос по поводу исключений в x64
Posted: Sun Jun 30, 2013 12:27 pm
by Admin
Общая ситуация ухудшается еще тем, что при виртуализации любой функции вверх по стеку вызовов при возникновении исключения процесс будет падать, т.к. механизм работы исключений в х64 очень сильно отличается от х32. Каждая функция имеет информацию о регионах адресов, в которых она живет, а также дополнительную информация по раскрутке стека. Дак вот при виртуализации кода исключение возникает уже совершенно по другому адресу, для которого система не может найти никакой информации ни об обработчике исключений, ни об информации по раскрутке стека. Когда будет сделана полноценна обработка исключений - неизвестно. Нужно проводить исследования.
Re: Вопрос по поводу исключений в x64
Posted: Sun Jun 30, 2013 2:20 pm
by V.I.R.U.S.
Есть ли надежда, что в
VMProtect 3 ситуация наладиться?
Дело в том, что исключения в любом случае возникают в приложении, очень часто такие ошибки просто обрабатываются в блоке try...except и приложение нормально работает дальше...
Если приложение отваливается на любой ошибке, нет речи о поддержке 64 бит в VMProtect. Это скорее "баловство".
Соответственно это

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

(сам проверил на демо-версии сегодня)
P.S.S.
Желаю удачи в исследованиях в этой области! Чтобы все получилось достаточно быстро и "малой кровью"!
Re: Вопрос по поводу исключений в x64
Posted: Sun Jun 30, 2013 2:50 pm
by Admin
А кто у нас ближайший конкурент если не секрет?
Re: Вопрос по поводу исключений в x64
Posted: Sun Jun 30, 2013 2:51 pm
by V.I.R.U.S.
Admin wrote:А кто у нас ближайший конкурент если не секрет?
Themida\WinLicense
Re: Вопрос по поводу исключений в x64
Posted: Mon Jul 01, 2013 4:31 am
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 кода.
Re: Вопрос по поводу исключений в x64
Posted: Mon Jul 01, 2013 8:49 am
by V.I.R.U.S.
Досконально
протестировал демки Themida. Как 32 битную, так и 64 битную... (Они отдельно скачиваются)
Знаете что самое интересное!
64 бита действительно работает, правда с небольшими оговорками, блок try..except не включается, а показывается сообщение об ошибке.
32 бита же, при водит к крашу...
Код компилировал в Delphi XE4.
Вот исходник и бинарники.
http://rghost.ru/47136111
Re: Вопрос по поводу исключений в x64
Posted: Mon Jul 01, 2013 9:19 am
by Admin
32 бита же, при водит к крашу...
Ваш тестовый х64 тоже крешится. Ну и какой он нафиг конкурент?

)
Re: Вопрос по поводу исключений в x64
Posted: Mon Jul 01, 2013 9:34 am
by V.I.R.U.S.
Admin wrote:
32 бита же, при водит к крашу...
Ваш тестовый х64 тоже крешится. Ну и какой он нафиг конкурент?

)
Проверил на виртуальной Windows 8.1 x64 и основной Windows 7 x64 - 64 битное приложение, скомпилированное в 64 битной фемиде - работает!
P.S.
Если бы я считал достойным конкурентом продукцию Oreans, я бы не взял VMProtect. И не переживал бы за него. Но какую-то конкуренцию он составляет, а лучше него протекторов я не знаю. Всякие ASProtect не серьезно...
Re: Вопрос по поводу исключений в x64
Posted: Mon Jul 01, 2013 9:55 am
by Admin
Проверил на виртуальной Windows 8.1 x64 и основной Windows 7 x64 - 64 битное приложение, скомпилированное в 64 битной фемиде - работает!
На моей Windows 7 x64 не работает - очередной минус продукту.
Re: Вопрос по поводу исключений в x64
Posted: Mon Jul 01, 2013 10:01 am
by V.I.R.U.S.
Admin wrote:
Проверил на виртуальной Windows 8.1 x64 и основной Windows 7 x64 - 64 битное приложение, скомпилированное в 64 битной фемиде - работает!
На моей Windows 7 x64 не работает - очередной минус продукту.
А Вы готовый бинарник использовали или заново собрали в фемиде? Дело в том, что демо-версия приложения криптует так, что на другом пк не работает программа и отображается окно что типа приложение собрано в демо-версии и работает только на том пк.
Re: Вопрос по поводу исключений в x64
Posted: Mon Jul 01, 2013 10:20 am
by Admin
Обрабатывал заново демкой с оффсайта (2.2.3.0)