Особенности национальной отладки Крис Касперски ака мыщъх Спецвыпуск: Хакер, номер #051, стр. 051-096-3 PT_ATTACH (в Linux – PTRACE_ATTACH) - переводит в состояние останова уже запущенный процесс с заданным pid, при этот процесс-отладчик становится его "предком". Остальные аргументы игнорируются. Процесс должен иметь тот же самый UID, что и отлаживающий процесс, и не быть setuid/setduid процессом (или отлаживаться root'ом). PT_DETACH (в Linux – PTRACE_DETACH) - прекращает отладку процесса с заданным pid (как по PT_ATTACH, так и по PT_TRACE_ME) и возобновляет его нормальное выполнение. Все остальные аргументы игнорируются. PT_CONTINUE (в Linux – PTRACE_CONT) - возобновляет выполнение отлаживаемого процесса с заданным pid без разрыва связи с процессом-отладчиком. Если addr == 1 (в LINUX – 0), выполнение продолжается с места последнего останова, в противном случае – с указанного адреса. Аргумент _data задает номер сигнала, посылаемого отлаживаемому процессу (ноль – нет сигналов). PT_STEP (в Linux – PTRACE_SINGLESTEP) - пошаговое выполнение процесса с заданным pid: выполнить следующую машинную инструкцию и перейти в состояние останова (под i386 это достигается взводом флага трассировки, хотя некоторые "хакерские" библиотеки используют аппаратные точки останова). BSD требует, чтобы аргумент addr был равен 1, Linux хочет видеть здесь 0. Остальные аргументы игнорируются. PT_READ_I/PT_REEAD_D (в Linux – PTRACE_PEEKTEXT/PTRACE_PEEKDATA) - чтение машинного слова из кодовой области и области данных адресного пространства отлаживаемого процесса соответственно. На большинстве современных платформ обе команды совершенно эквивалентны. Функция ptrace принимает целевой addr и возвращает считанный результат. PT_WRITE_I/PR_READ_D (в Linux – PTRACE_POKETEXT, PTRACE_POKEDATA) - запись машинного слова, переданного в _data, по адресу addr. PT_GETREGS/PT_GETFPREGS/PT_GETDBREGS (в Linux – PTRACE_GETREGS, PTRACE_GETFPREGS, PTRACE_GETFPXREGS) - чтение регистров общего назначения, сегментных и отладочных регистров в область памяти процесса-отладчика, заданную указателем _addr. Это системно-зависимые команды, приемлемые только для i386 платформы. Описание регистровой структуры содержится в файле <machine/reg.h>. PT_SETREGS/PT_SETFPREGS/PT_SETDBREGS (в Linux – PTRACE_SETREGS, PTRACE_SETFPREGS, PTRACE_SETFPXREGS) - установка значения регистров отлаживаемого процесса путем копирования содержимого региона памяти по указателю _addr. PT_KILL (в Linux – PTRACE_KILL) - посылает отлаживаемому процессу сигнал sigkill, который делает ему харакири. Краткое руководство по GDB GDB – это консольное приложение, выполненное в классическом духе командной строки. И хотя за время своего существования GDB успел обрасти ворохом красивых графических морд, интерактивная отладка в стиле TD в мире *nix не очень популярна. Как правило, это удел эмигрантов с Windows-платформы, сознание которых необратимо искалечено идеологией "окон". Грубо говоря, если TD – слесарный инструмент, то GDB – токарный станок с программным управлением. Когда-нибудь ты полюбишь его… |