сторонняя библиотека с антиотладочным кодом

Мы используем стороннюю библиотеку для нашей программы (настольное приложение, написанное на С++), библиотека защищена кодом защиты от отладки, слоями шифрования/дешифрования, мусорным кодом, инициированными исключениями и другими методами защиты от отладки, что делает невозможным работу над ней. режим отладки (в Visual Studio 2010).

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


person otto    schedule 04.06.2013    source источник
comment
Вы можете попробовать создать две функции, которые возвращают известные результаты для набора данных. Затем вы можете протестировать приложение с данными, без библиотеки и в режиме отладки.   -  person Djon    schedule 04.06.2013
comment
На самом деле я пробовал это. Мы используем эту стороннюю библиотеку для обеспечения безопасности, данные не повторяются сами по себе, поэтому невозможно создать некоторые тестовые данные и использовать их временно. Мне действительно нужно отделить его от приложения.   -  person otto    schedule 04.06.2013


Ответы (2)


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

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

Поскольку библиотека находится в отдельном исполняемом файле, это не помешает вам отладить вашу программу.

person Matthieu Rouget    schedule 04.06.2013
comment
На самом деле это звучит как хорошее решение, что вы можете сказать о производительности? А также каково ваше мнение об использовании boost для межпроцессного взаимодействия? Можете ли вы сравнить его с ZeroMQ? - person otto; 04.06.2013
comment
Скорость — понятие относительное, она зависит от вашего проекта. Если вас беспокоит абсолютная производительность, вам следует реализовать это решение только в целях отладки. ZeroMQ действительно быстр для того, что он делает, он может использовать IPC вместо сокетов. Однако, каким бы быстрым он ни был, он все же медленнее, чем прямые вызовы. Я никогда не использовал межпроцессную связь Boost, поэтому не могу сравнивать. - person Matthieu Rouget; 04.06.2013

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

person loentar    schedule 04.06.2013
comment
что вы имеете в виду под тупиковыми данными? Я не пытался создать новую библиотеку с тем же интерфейсом, но, по моему мнению, это приведет к тому же результату, поскольку антиотладочный код все еще будет там. - person otto; 04.06.2013