Как отладить сбой в процессе, содержащем анти-отладочные меры - PullRequest
0 голосов
/ 02 апреля 2012

В нашем приложении произошел сбой, который я не могу отладить, поскольку один из наших партнеров счел целесообразным использовать действительно ужасный CodeMeter для шифрования своей DLL.Лицензирование CodeMeter предотвращает все попытки отладки приложения, содержащего зашифрованную DLL-библиотеку CodeMeter, и даже, кажется, приводит к сбою MiniDumpWriteDump, вызываемому из фильтра необработанных исключений (этот метод работает без загрузки этой DLL).Сбой происходит только тогда, когда зашифрованная DLL загружается в процесс.

Я схожу с ума, пытаясь отладить это и установить, происходит ли сбой зашифрованная DLL, и если да, то как я могу предоставить адекватную диагностическую информацию длянаш партнер решит эту проблему.

Есть предложения - возможно, какой-нибудь ручной код стека и модуля, который я мог бы вызвать из моего необработанного фильтра исключений?

Имеются ли в CodeMeter настройки сборки, которые позволят нашему партнеру создаватьсборка, которая все еще зашифрована и лицензирована, но не занимается саботажной отладкой так агрессивно?

Просто чтобы было ясно, если есть сомнения, я не пытаюсь взломать лицензирование, просто диагностируйте этот сбой.

1 Ответ

0 голосов
/ 11 апреля 2012

Я использовал некоторый стековый код , который хорошо работает, который можно вызвать из SEH или необработанного фильтра исключений, передав запись CONTEXT, переданную в фильтр исключений.

Адреса в стеке и потенциальные адреса в первых нескольких параметрах исключений можно интерпретировать, используя SymFromAddr в DbgHelp , включая дескриптор модуля. Добавьте к этому log имен файлов модулей и дескрипторов модулей для интерпретации, к каким DLL относятся адреса стека.

Этот конкретный сбой был исключением из Visual C ++. Тип исключения раскрывается путем поиска адреса одного из параметров исключения с помощью SymFromAddr.

В блоге Рэймонда Чена есть код для нахождения типа исключения Visual C ++ из параметров исключения, но я не мог заставить это работать для меня по какой-то причине (возможно, из-за моей собственной ошибки).

...