Разница между 1.16 и текущей версией PtraceTuto.
@@ -1,39 +1,41 @@
-
-- Принципы работы отладчиков
+= Принципы работы отладчиков
 
 
 Часто для того, чтобы разобраться почему код работает не так, программист прибегает к помощи
-отладчиков, однако, то как они устроены и каким образом действуют, известно далеко не всем. В этой
-статье будет дано краткое описание механизма отладки, который используется операционной системой Linux и приведён короткий пример его использования.
+отладчиков, однако как они устроены и каким образом действуют, известно далеко не всем. В этой
+заметке будет дано краткое описание механизма отладки, который используется операционной системой Linux и приведён короткий пример его использования.
+
+Для начала дадим пару неформальных определений.
 
-Для начала дадим неформальное определение.
 Отладчик — программа, с помощью которой можно подробно 
 отслеживать и изменять статус выполнения другой программы.
 
+Точка останова — «место» в коде отлаживаемого процесса, при обращении к которому произойдёт прерывание
+и информация об этом передастся отладчику.
+
 Типы Отладчиков:
-	* отладчики уровня ядра ОС — компонент ядра ОС, позволяющий отлаживать ОС и процессы. Для работы отладчик использует функционал, заложенный в процессор.
-	* отладчики приложений — пользовательская программа, которая позволяет отлаживать другие процессы. Для работы используют API-интерфейс, который предоставляет ядро ОС.
+	1 Отладчик уровня ядра ОС — компонент ядра ОС, позволяющий отлаживать ОС и процессы. Для работы отладчик использует функционал, заложенный в процессор.
+	1 Отладчик приложений — пользовательская программа, которая позволяет отлаживать другие процессы. Для работы используют API-интерфейс, который предоставляет ядро ОС.
 
 
-Подробно остановимся на втором типе отладчиков, и попробуем разобраться, какой функционал необходимо предоставлять ядро ОС для их работы. Перечислим основные функции, необходимые отладчику:
-	* возможность стартовать и останавливать отлаживаемый процесс.
-	* возможность пошагового исполнения кода.
-	* возможность читать и писать в произвольную область памяти отлаживаемого процесса.
-	* чтение и изменение содержимого регистров процессора.
+Сейчас мы сосредоточнимся на втором типе отладчиков
+и перечислим основные функции, необходимые им для работы:
+	1 возможность стартовать и останавливать отлаживаемый процесс.
+	1 возможность пошагового исполнения кода.
+	1 возможность читать и писать в произвольную область памяти отлаживаемого процесса.
+	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'' определяет тип операции:
 будет ли это попытка начать отладку процесса,
@@ -54,7 +56,7 @@
 
 Кратко опишем некоторые типы запросов.
 
---- PTRACE_GETREGS, PTRACE_SETREGS, PTRACE_GETFPREGS , PTRACE_SETFPREGS
+-- PTRACE_GETREGS, PTRACE_SETREGS, PTRACE_GETFPREGS , PTRACE_SETFPREGS
 
 Получаем или изменяем основные регистры или регистры FPU.
 Указатель на структуру с регистрами передаётся в
@@ -63,9 +65,9 @@
 Для основных регистров используется структура
 ''struct user_regs_struct'',
 для регистров FPU ''struct user_fpregs_struct'' .
-Определения структур находятся в sys/user.h.
+Определения структур находятся в заголовке 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'' адресу.
@@ -74,14 +76,14 @@
 Так как -1 (0xffffffff)
 также может быть адресом,
 для проверки на ошибку необходимо дополнительно
-проверять значение '''errno''' .
+проверять значение errno(3) .
 
---- PTRACE_CONT
+-- PTRACE_CONT
 Продолжает выполнение остановленного процесса.
 Если ''data'' не ''NULL'' и не ''SIGSTOP'' ,
 значение интерпретируется как сигнал, который посылается процессу.
 
-* '''PTRACE_SINGLESTEP''' , '''PTRACE_SYSCALL'''
+-- PTRACE_SINGLESTEP, PTRACE_SYSCALL
 Продолжает выполнение остановленного процесса,
 как и в случае с 
 '''PTRACE_CONT''', но указывает,
@@ -91,7 +93,7 @@
 Аргумент ''data'' будет интерпретирован как и в случае с
 '''PTRACE_CONT'''.
 
---- PTRACE_DETACH
+-- PTRACE_DETACH
 
 Отменяет эффекты '''PTRACE_TRACEME''', '''PTRACE_ATTACH'''
 для процесса с указанным ''pid'',
@@ -106,21 +108,22 @@
 можно посмотреть в мануале ptrace(2).
 
 
--- Тестовая программа с использованием strace(2)
+- Тестовая программа с использованием strace(2)
 
 
 Разберём простой пример использования ptrace(2). Наш тестовый отладчик будет следить за системными вызовами отлаживаемого приложения, печатать содержимое регистров перед системным вызовом и его возвращаемый статус.
 
 
-Код тестового приложения доступен [https://vk.com/doc16487792_462035342?hash=de3c1b178a4a70c78e&dl=f3d2cb843ffdfd5657| по ссылке].
+Код тестовой программы доступен [[https://vk.com/doc16487792_462035342?hash=de3c1b178a4a70c78e&dl=f3d2cb843ffdfd5657| по ссылке]].
 
 Содержимое архива:
-* мейкфайл, осуществляющий сборку всех исполняемых файлов.
-* debugee.c — это код отлаживаемой программы,
-* main.c — код тестового отладчика (собирается в исполняемый файл tracer).
--- Полезный софт, использующий ptrace(2)
+	* Makefile — мейкфайл, осуществляющий сборку всех исполняемых файлов.
+	* debugee.c — это код отлаживаемой программы,
+	* main.c — код тестового отладчика (собирается в исполняемый файл tracer).
+
+- Полезный cофт, использующий ptrace(2)
 
---- strace(1)
+-- strace(1)
 	
 Трассировщик системных вызовов,
 может быть очень полезен при первичной отладке чужого (или вашего) бинарника,
@@ -132,9 +135,9 @@
 $ strace ls
 ===
 
-В результате запуска программы на стандартный поток ошибок валится информация о системных вызовах, которые сделал ls
+В результате запуска программы на стандартный поток ошибок валится информация о системных вызовах, которые сделал ls.
 
-strace(1) позволяет осуществлять фильтрацию по типам системных вызовов или их именам с помощью опции -e, например:
+Strace(1) позволяет осуществлять фильтрацию по типам системных вызовов или их именам с помощью опции -e, например:
 
 ===
 $ strace -e trace=file sh -c ls
@@ -143,12 +146,21 @@
 отобразит все обращения к файлам, сделанные процессом 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?]]
+	1 [[https://wiki.osdev.org/Interrupt | OSDev interrupts info]]
+	1 [[https://wiki.osdev.org/Exceptions | OSDev exceptions list]]
+	1 [[https://wiki.osdev.org/System_Calls | OSDev. syscalls]]
+	1 Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3: System Programming Guide