Сейчас на форуме: Magister Yoda, rtsgreg1989 (+7 невидимых)

 eXeL@B —› Основной форум —› Методы антиотладки в Solaris, вопрос.
Посл.ответ Сообщение

Ранг: 0.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 21 апреля 2005 15:08
· Личное сообщение · #1

Сделал хитрую антиотладочную проверку для *nix-версии программы. Стал портировать на Solaris, напоролся на такой момент: PTRACE_ATTACH в версии Solaris > 2.7 нет. Тогда стал мудрить с PTRACE_TRACEME и PTRACE_SIGNLESTEP. Нарвался ещё на ряд неприятностей. Вот банальный проверяльщик:

#include <stdio.h>

#include <sys/ptrace.h>
#include <unistd.h>

int main(void)
{
if (ptrace(PTRACE_TRACEME, 0, 0, 0) < 0)
printf("Debugger detected.\n");

sleep(1);
return 0;
}


В линуксе он замечательно работает. В солярисе уходит в даун. Потому что подразумевается то ли постоянный вызов PTRACE_SINGLESTEP из родительского процесса, то ли ещё что-то.

Как быть? Как в сорярисе по-быстрому (я уж не спрашиваю по серьёзную защиту, там дальше я сам как-нибудь) сделать такую проверку? Очень надеюсь на то, что хоть кто-то поможет советом.



Ранг: 0.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 21 апреля 2005 15:15
· Личное сообщение · #2

Добавлю, что если расписать программку так:
#include <stdio.h>

#include <sys/ptrace.h>
#include <unistd.h>

int main(void)
{
if (ptrace(PTRACE_TRACEME, 0, 0, 0) < 0)
printf("Debugger detected.\n");

return 0;
}

То под Solaris'ом она выполнятся _будет, без получения Stopped. Но она же в этом случае и _не_определяет_ наличие gdb.


 eXeL@B —› Основной форум —› Методы антиотладки в Solaris, вопрос.
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати