Действительно структурированный вывод в strace (Эльвира Хабирова, OSSDEVCONF-2016) — различия между версиями
Материал из 0x1.tv
StasFomin (обсуждение | вклад) (→Расширенные тезисы) |
StasFomin (обсуждение | вклад) |
||
\EN{\emph{seccomp}}. Другой особенностью данного примера является формат вывода команд \EN{BPF}, которые являют собой структуры, но для которых в \EN{\texttt{<linux/filter.h>}} определены макрокоманды для их определения в коде на языке Си; декодер системного вызова определяет по содержимому структур подходяющую макрокоманду и печатает соответствующую макрокоманду. На следующей иллюстрации отметим формат вывода третьего аргумента, \EN{\emph{vec}}, который представляет собой массив байт, из каждого из которых значащий только один бит. На иллюстрации~\ref{fig:listen} \begin{figure}[h!] \centering \begin{small} \begin{verbatim}mincore(0x2ba1f6293000, 131073, [11111111111111111111...]) = 0\end{verbatim} \end{small} \squeeze \caption{Пример отображения информации о системном вызове \EN{\emph{mincore}}}\label{fig:mincore} \squeeze \end{figure} На следующей иллюстрации интересен формат вывода, используемый для файловых дескрипторов (первый аргумент). \begin{figure}[h!] \centering \begin{small} \begin{verbatim}listen(3<TCP:[4490622]>, 1) = 0\end{verbatim} \end{small} \squeeze \caption{Пример отображения информации о системном вызове \EN{\emph{listen}}}\label{fig:listen} \squeeze \end{figure} А в примере на следующем рисунке, можно отметить специфический формат, \item[--] И, главное, выделение процесса форматирования вывода в отдельную сущность позволило реализовать то, ради чего затевался переход на структурированный вывод~--- форматирование вывода в машиночитаемом виде. В качестве примера такого формата был выбран \EN{JSON}. Заложенная архитектура позволяет просто реализовывать дополнительные машиночитаемые и человекочитаемые синтаксисы. В качестве возможных вариантов есть \EN{pcap}/\EN{pcapng}~\cite{pcapng}, \EN{YAML}. \end{itemize} \subsection{</latex> === Текущее состояние} === <latex> Работы по переходу на структурированный вывод ещё не закончены. К настоящему моменту стабилизирован API структурного вывода~\cite{readme-structured}, сконвертировано примерно 65\% декодеров системных вызовов, реализованы выводы в форматах \EN{legacy} и \EN{JSON}, реализована базовая проверка, является ли вывод в формате \EN{JSON} корректным \EN{JSON} (проверка на отсутствие остатков непосредственных вызовов функций печати). Регулярно производится \EN{\texttt{git rebase}} на \EN{master}-ветку \EN{\emph{strace}}. Из несделанного~--- помимо оставшихся декодеров |
Версия 14:58, 9 октября 2016
Содержание
Аннотация
- Докладчик
- Эльвира Хабирова
strace --- утилита для отладки программ. Она отображает сделанные отлаживаемым процессом tracee системные вызовы, пришедшие ему сигналы, изменения его состояния и пр.
Вывод strace на данный момент нацелен на человекочитаемость и по этой причине тяжело поддается автоматической обработке.
Кроме того, из-за отсутствия единой системы вывода в выводе могут присутствовать неточности, что еще сильнее усложняет задачу.
Поэтому в рамках GSoC~2016 проблема автоматической обработки была решена разработкой такой единой системы.
Как результат, стало возможным легко встраивать не только подсистемы любого формата вывода, но и дополнительные слои логики.
Видео
Слайды
Расширенные тезисы
Обзор проблемы
Идея структурированного вывода
Второй важной особенностью является введение промежуточного представления системного вызова:
Текущее состояние