Вопрос по поводу исключений в x64
-
- Posts: 24
- Joined: Sun Apr 03, 2011 5:12 am
Вопрос по поводу исключений в x64
Уважаемый 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
"В настоящий момент в х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
А вот теперь попробуйте завиртуализировать функцию, в которой возникает исключение.
-
- Posts: 24
- Joined: Sun Apr 03, 2011 5:12 am
Re: Вопрос по поводу исключений в x64
Сейчас попробую!Admin wrote:А вот теперь попробуйте завиртуализировать функцию, в которой возникает исключение.
-
- Posts: 24
- Joined: Sun Apr 03, 2011 5:12 am
Re: Вопрос по поводу исключений в x64
Да... И правда не работает... Приложение крашется...
Может быть есть какие то советы? Ведь падать на любой ошибке, даже в блоке try...except это печально...
А вообще...
Это временно? В будущем есть ли планы поправить ситуацию?
Может быть есть какие то советы? Ведь падать на любой ошибке, даже в блоке try...except это печально...
А вообще...
Это временно? В будущем есть ли планы поправить ситуацию?
Re: Вопрос по поводу исключений в x64
Общая ситуация ухудшается еще тем, что при виртуализации любой функции вверх по стеку вызовов при возникновении исключения процесс будет падать, т.к. механизм работы исключений в х64 очень сильно отличается от х32. Каждая функция имеет информацию о регионах адресов, в которых она живет, а также дополнительную информация по раскрутке стека. Дак вот при виртуализации кода исключение возникает уже совершенно по другому адресу, для которого система не может найти никакой информации ни об обработчике исключений, ни об информации по раскрутке стека. Когда будет сделана полноценна обработка исключений - неизвестно. Нужно проводить исследования.
-
- Posts: 24
- Joined: Sun Apr 03, 2011 5:12 am
Re: Вопрос по поводу исключений в x64
Есть ли надежда, что в VMProtect 3 ситуация наладиться?
Дело в том, что исключения в любом случае возникают в приложении, очень часто такие ошибки просто обрабатываются в блоке try...except и приложение нормально работает дальше...
Если приложение отваливается на любой ошибке, нет речи о поддержке 64 бит в VMProtect. Это скорее "баловство".
Соответственно это
можно и убрать...
P.S.
Я очень доволен протектором в 32 битных приложениях. Мощный и удобный.
Но очень сильно растроился, когда хотел было осваивать 64 бита, а тут такое...
И что самое обидное, у ближайшего конкурента такая поддержка х64 есть... (сам проверил на демо-версии сегодня)
P.S.S.
Желаю удачи в исследованиях в этой области! Чтобы все получилось достаточно быстро и "малой кровью"!
Дело в том, что исключения в любом случае возникают в приложении, очень часто такие ошибки просто обрабатываются в блоке try...except и приложение нормально работает дальше...
Если приложение отваливается на любой ошибке, нет речи о поддержке 64 бит в VMProtect. Это скорее "баловство".
Соответственно это
можно и убрать...
P.S.
Я очень доволен протектором в 32 битных приложениях. Мощный и удобный.
Но очень сильно растроился, когда хотел было осваивать 64 бита, а тут такое...
И что самое обидное, у ближайшего конкурента такая поддержка х64 есть... (сам проверил на демо-версии сегодня)
P.S.S.
Желаю удачи в исследованиях в этой области! Чтобы все получилось достаточно быстро и "малой кровью"!
Re: Вопрос по поводу исключений в x64
А кто у нас ближайший конкурент если не секрет?
-
- Posts: 24
- Joined: Sun Apr 03, 2011 5:12 am
Re: Вопрос по поводу исключений в x64
Themida\WinLicenseAdmin wrote:А кто у нас ближайший конкурент если не секрет?
Re: Вопрос по поводу исключений в x64
Насколько я знаю у Themida не поддерживаются исключения даже в х32. Думал что-то изменилось в последних версиях - ожидания не оправдались, падает как в х64 так и в х32.
Код на Delphi:
Код на C++:
Код на 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;
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;
}
Следуя вашей логике Themida - это "баловство" даже для х32 кода.Если приложение отваливается на любой ошибке, нет речи о поддержке 64 бит в VMProtect. Это скорее "баловство".
-
- Posts: 24
- Joined: Sun Apr 03, 2011 5:12 am
Re: Вопрос по поводу исключений в x64
Досконально протестировал демки Themida. Как 32 битную, так и 64 битную... (Они отдельно скачиваются)
Знаете что самое интересное!
64 бита действительно работает, правда с небольшими оговорками, блок try..except не включается, а показывается сообщение об ошибке.
32 бита же, при водит к крашу...
Код компилировал в Delphi XE4.
Вот исходник и бинарники.
http://rghost.ru/47136111
Знаете что самое интересное!
64 бита действительно работает, правда с небольшими оговорками, блок try..except не включается, а показывается сообщение об ошибке.
32 бита же, при водит к крашу...
Код компилировал в Delphi XE4.
Вот исходник и бинарники.
http://rghost.ru/47136111
Re: Вопрос по поводу исключений в x64
Ваш тестовый х64 тоже крешится. Ну и какой он нафиг конкурент? )32 бита же, при водит к крашу...
-
- Posts: 24
- Joined: Sun Apr 03, 2011 5:12 am
Re: Вопрос по поводу исключений в x64
Проверил на виртуальной Windows 8.1 x64 и основной Windows 7 x64 - 64 битное приложение, скомпилированное в 64 битной фемиде - работает!Admin wrote:Ваш тестовый х64 тоже крешится. Ну и какой он нафиг конкурент? )32 бита же, при водит к крашу...
P.S.
Если бы я считал достойным конкурентом продукцию Oreans, я бы не взял VMProtect. И не переживал бы за него. Но какую-то конкуренцию он составляет, а лучше него протекторов я не знаю. Всякие ASProtect не серьезно...
Re: Вопрос по поводу исключений в x64
На моей Windows 7 x64 не работает - очередной минус продукту.Проверил на виртуальной Windows 8.1 x64 и основной Windows 7 x64 - 64 битное приложение, скомпилированное в 64 битной фемиде - работает!
-
- Posts: 24
- Joined: Sun Apr 03, 2011 5:12 am
Re: Вопрос по поводу исключений в x64
А Вы готовый бинарник использовали или заново собрали в фемиде? Дело в том, что демо-версия приложения криптует так, что на другом пк не работает программа и отображается окно что типа приложение собрано в демо-версии и работает только на том пк.Admin wrote:На моей Windows 7 x64 не работает - очередной минус продукту.Проверил на виртуальной Windows 8.1 x64 и основной Windows 7 x64 - 64 битное приложение, скомпилированное в 64 битной фемиде - работает!
Re: Вопрос по поводу исключений в x64
Обрабатывал заново демкой с оффсайта (2.2.3.0)