Разница между 1.37
и текущей версией
PtraceTuto.
@@ -1,5 +1,4 @@
-
-- Принципы работы отладчиков
+= Принципы работы отладчиков
Часто для того, чтобы разобраться почему код работает не так, программист прибегает к помощи
@@ -27,19 +26,16 @@
1 чтение и изменение содержимого регистров процессора.
--- Системный вызов ptrace(2)
+- Системный вызов ptrace(2)
В OC Linux весь отладочный функционал доступен с использованием системного вызова ptrace(2).
Интерфейс системного вызова:
-----
-===
+==={c}
long
-ptrace(enum __ptrace_request request , pid_t pid , void ∗addr , void ∗data);
+ptrace(enum __ptrace_request request , pid_t pid , void *addr , void *data);
===
-----
-
Аргумент ''request'' определяет тип операции:
будет ли это попытка начать отладку процесса,
@@ -60,7 +56,7 @@
Кратко опишем некоторые типы запросов.
---- PTRACE_GETREGS, PTRACE_SETREGS, PTRACE_GETFPREGS , PTRACE_SETFPREGS
+-- PTRACE_GETREGS, PTRACE_SETREGS, PTRACE_GETFPREGS , PTRACE_SETFPREGS
Получаем или изменяем основные регистры или регистры FPU.
Указатель на структуру с регистрами передаётся в
@@ -71,7 +67,7 @@
для регистров FPU ''struct user_fpregs_struct'' .
Определения структур находятся в заголовке sys/user.h.
---- PTRACE_PEEK_DATA, PTRACE_PEEK_TEXT , PTRACE_POKE_DATA , PTRACE_POKE_TEXT
+-- PTRACE_PEEK_DATA, PTRACE_PEEK_TEXT , PTRACE_POKE_DATA , PTRACE_POKE_TEXT
Получаем или изменяем данные в памяти исследуемого процесса
по переданному в ''addr'' адресу.
@@ -82,12 +78,12 @@
для проверки на ошибку необходимо дополнительно
проверять значение errno(3) .
---- PTRACE_CONT
+-- PTRACE_CONT
Продолжает выполнение остановленного процесса.
Если ''data'' не ''NULL'' и не ''SIGSTOP'' ,
значение интерпретируется как сигнал, который посылается процессу.
---- PTRACE_SINGLESTEP, PTRACE_SYSCALL
+-- PTRACE_SINGLESTEP, PTRACE_SYSCALL
Продолжает выполнение остановленного процесса,
как и в случае с
'''PTRACE_CONT''', но указывает,
@@ -97,7 +93,7 @@
Аргумент ''data'' будет интерпретирован как и в случае с
'''PTRACE_CONT'''.
---- PTRACE_DETACH
+-- PTRACE_DETACH
Отменяет эффекты '''PTRACE_TRACEME''', '''PTRACE_ATTACH'''
для процесса с указанным ''pid'',
@@ -112,7 +108,7 @@
можно посмотреть в мануале ptrace(2).
--- Тестовая программа с использованием strace(2)
+- Тестовая программа с использованием strace(2)
Разберём простой пример использования ptrace(2). Наш тестовый отладчик будет следить за системными вызовами отлаживаемого приложения, печатать содержимое регистров перед системным вызовом и его возвращаемый статус.
@@ -125,9 +121,9 @@
* debugee.c — это код отлаживаемой программы,
* main.c — код тестового отладчика (собирается в исполняемый файл tracer).
--- Полезный cофт, использующий ptrace(2)
+- Полезный cофт, использующий ptrace(2)
---- strace(1)
+-- strace(1)
Трассировщик системных вызовов,
может быть очень полезен при первичной отладке чужого (или вашего) бинарника,
@@ -150,17 +146,17 @@
отобразит все обращения к файлам, сделанные процессом sh
---- ltrace(1)
+-- ltrace(1)
Трасировщик библиотечных функцкий.
Программа работает аналогично strace(3).
Однако помимо системных вызовов, показывает все вызовы функций из разделяемых библиотек.
---- gdb(1)
+-- gdb(1)
Полноценный консольный отладчик.
--- Список литературы и помойка ссылок
+- Список литературы и помойка ссылок
1 [[https://blog.packagecloud.io/eng/2016/02/29/how-does-strace-work/ | Blogpost. How does strace works?]]
1 [[https://blog.packagecloud.io/eng/2016/03/14/how-does-ltrace-work/ | Blogpost. How does ltrace works?]]