eXeL@B —› Программирование —› Отладка программы при подключенной защищенной dll |
Посл.ответ | Сообщение |
|
Создано: 13 марта 2013 15:56 · Личное сообщение · #1 Ситуация такова: имеется либа защищенная протектором и h файл к ней. При подключении её к своей проге в дебаг режиме при запуске проги возникает исключение "exception 0xC0000096: Privileged instruction" на инструкции rdtsc. В релиз режиме (или дебаг ехе запущенный из системы) всё работает без вопросов. Подскажите, что нужно сделать чтобы иметь возможность отладки своей проги в VisualStudio? Что там в либе мне по барабану... ----- Everything is relative... |
|
Создано: 13 марта 2013 16:10 · Личное сообщение · #2 |
|
Создано: 13 марта 2013 16:15 · Личное сообщение · #3 |
|
Создано: 13 марта 2013 16:27 · Поправил: reversecode · Личное сообщение · #4 |
|
Создано: 13 марта 2013 16:36 · Личное сообщение · #5 |
|
Создано: 13 марта 2013 16:40 · Поправил: reversecode · Личное сообщение · #6 rdtsc не привелигированая как мне помнится в винде.. и если она вдруг оказывается привелигированой, то может иметь место защита от отладчика имхо набросайт мини стест в студии #include <intrin.h> #pragma intrinsic(__rdtsc) unsigned __int64 rdtsc() { return __rdtsc(); } ...... итд и узнаешь поднимает ли дебарег ексепшен на полупривелигироване инструкции или это защита меняет cr4 |
|
Создано: 13 марта 2013 17:02 · Личное сообщение · #7 RDTSC в винде разрешена. Если реально именно она бросает исключение, то без драйвера, видимо, не обошлось. | Сообщение посчитали полезным: Dr0p |
|
Создано: 13 марта 2013 22:01 · Личное сообщение · #8 |
|
Создано: 13 марта 2013 22:37 · Поправил: r_e · Личное сообщение · #9 |
|
Создано: 14 марта 2013 09:55 · Личное сообщение · #10 r_e Похоже так оно и есть, расписывать не нужно, а вот ответ на вопрос как же организовать отладку своего кода не помешал бы. Мне тут предложили такой вариант - сделать на защищенную либу свою dll обертку (на нужные функции), которую и прилинковать к проекту. А объяснить почему это должно сработать не смогли. Так как пока другого варианта нет попробую этот. ----- Everything is relative... |
|
Создано: 14 марта 2013 10:17 · Личное сообщение · #11 |
|
Создано: 14 марта 2013 10:27 · Личное сообщение · #12 |
|
Создано: 14 марта 2013 10:32 · Поправил: reversecode · Личное сообщение · #13 |
|
Создано: 14 марта 2013 11:29 · Личное сообщение · #14 |
|
Создано: 14 марта 2013 12:14 · Личное сообщение · #15 |
|
Создано: 14 марта 2013 19:32 · Личное сообщение · #16 |
|
Создано: 15 марта 2013 16:49 · Личное сообщение · #17 |
|
Создано: 15 марта 2013 20:52 · Поправил: ARCHANGEL · Личное сообщение · #18 Эммм, аж неудобно как-то. А распишите для меня, дурака, что тут пытаются сделать. Как я понимаю, есть некое приложение (ехе), которое имеет в таблице импорта (статическая линковка) функции из некоей либы, защищённой вмпротом. Чтоб такое эффективно отлаживать без отладки кода самой библиотеки, делается примерно следующее. Создаётся библиотека с таким же именем, как и у протекченной. У неё создаются такие же экспорты с такими же сигнатурами вызовов. Сам код по-прежнему хранится и вызывается из протекченной либы. Т.е. на данном этапе имеем 3 файла: 1. Ехе, который хотим отладить. 2. VmprotDll - упакованная либа. 3. ProxyDll - промежуточная либа. Как я понял, это всё как-то увязывается в кучу через COM. Т.е. где-то есть COM-сервер, COM-клиент обращается к нему, COM-клиент - это ProxyDll, сервер вызывает функции из VmprotDll и возвращает результат клиенту. А вот непонятно, как этот сервер реализовать, т.е. как сделать так, что он вызывал функции из VmprotDll и передавал результат в ProxyDll, и чтоб это всё работало. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 15 марта 2013 22:30 · Поправил: r_e · Личное сообщение · #19 Ухх.. судя по всему многим непонятно как сделать так чтоб защищенная длл выполнялась в независимом "домене". Итак, исходная конфигурация: А. Протекченная ДЛЛ (sdk.dll) Б. Отлаживаемый проект. Способ линковки роли не играет. Задача, вывести протекченную длл мз контекста выполняемого приложения. Из условий задачи у нас есть хедер sdk.h с публичным API, через который мы работаем с sdk.dll. Берем sdk.h и реализуем публичный интерфейс как показано ниже. Будет ли это static lib, dynamic lib или вообще прямо в проекте пара доп файлов - разницы никакой. Реализация не выполняет ничего, кроме переброски вызовов через IPC в другой контекст (на сервер). IPC - это любая из технологий межпроцессного взаимодействия: pipes, sockets, shared memory, com, windows messages, mailboxes, etc. Соответственно, прийдется реализовать и сервер. Который принимает запросы от клиента и преобразует их в вызовы протекченной dll. Code:
Возможно, проще запрятать отладчик =) ----- старый пень | Сообщение посчитали полезным: ARCHANGEL |
|
Создано: 15 марта 2013 22:53 · Личное сообщение · #20 А, вот как. Т.е. есть левый ехе, который мы именуем сервером. Он вызыает функции из протекченной библиотеки. А результат по запросу предоставляет другому приложению (тоже ехе). А это приложение (второй ехе) мы как раз и хотим отладить. Ясно, концепция понятна, но не всегда применима. Вот вернёт мне эта протекченная библиотека указатель, а он валидный только в контексте сервера. А этот указатель, возможно, указывает на структуру, в которой половина полей - тоже указатели, и т.д. Тоска, возможно, действительно проще прятать отладчик (юзать олли для дебага). ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 15 марта 2013 23:16 · Поправил: r_e · Личное сообщение · #21 ARCHANGEL Проблема указателей существовала всегда. Частично она решается следующим образом. Если СДК возвращает указатель на что-то чья структура известна. Это что-то сериализуется и передается клиенту. На клиенте оно тем же образом воспроизводится в структуру и возвращается валидный указатель уже приложению. Если что-то неизвестно, то неважно что вернула либа. Для приложения оно никакого смысла не несет. Почитай boost::serialization и рядом. ----- старый пень |
eXeL@B —› Программирование —› Отладка программы при подключенной защищенной dll |
Эта тема закрыта. Ответы больше не принимаются. |