Strace — новые возможности (Дмитрий Левин, OSSDEVCONF-2017) — различия между версиями

Материал из 0x1.tv

(Batch edit: add Category:Open-source)
(Batch edit: replace PCRE (\n\n)+(\n) with \2)
 
(не показано 27 промежуточных версий этого же участника)
;{{SpeakerInfo}}: {{Speaker|Дмитрий Левин}}
<blockquote>
Strace — инструмент для отслеживания и влияния на взаимодействия пользовательских процессов и ядра Linux: системных вызовов,
сигналов и изменений состояния процесса. 

За минувший год в strace реализовано много нового и интересного.
</blockquote>

{{VideoSection}}
{{vimeoembed|235962137|800|450}}
{{youtubelink|2K1M9ggC8Gk}}{{letscomment}}
{{SlidesSection}}
[[File:Strace — новые возможности (Дмитрий Левин, OSSDEVCONF-2017).pdf|left|page=-|300px]]

{{----}}

== Thesis ==
=== Advanced syscall information tool ===
В рамках GSoC 2017 Эдгар Казиахмедов реализовал прототип новой утилиты asinfo,
предназначенной для получения разнообразной информации о системных вызовых.
Подробнее об этом расскажет автор в своём докладе.

{{LinksSection}}
<!-- <blockquote>[©]</blockquote> -->
{{fblink|1951738691745809}}                                          
{{vklink|761}}                                          

<references/>
[[File:{{#setmainimage:Strace  новые возможности (Дмитрий Левин, OSSDEVCONF-2017)!.jpg}}|center|640px]]

{{stats|disqus_comments=0|refresh_time=2017-12-12T16:49:24.2351582021-08-31T16:37:54.962678|vimeo_comments=0|vimeo_plays=577|youtube_comments=0|youtube_plays=10}}
[[Category:Open-source]]77}}

[[Категория:OSSDEVCONF-2017]]
[[Категория:Strace]]

Текущая версия на 12:19, 4 сентября 2021

Докладчик
Дмитрий Левин.jpg
Дмитрий Левин

Strace — инструмент для отслеживания и влияния на взаимодействия пользовательских процессов и ядра Linux: системных вызовов, сигналов и изменений состояния процесса.

За минувший год в strace реализовано много нового и интересного.

Видео

on youtube

Посмотрели доклад? Понравился? Напишите комментарий! Не согласны? Тем более напишите.

Презентация

Strace — новые возможности (Дмитрий Левин, OSSDEVCONF-2017).pdf Strace — новые возможности (Дмитрий Левин, OSSDEVCONF-2017).pdf Strace — новые возможности (Дмитрий Левин, OSSDEVCONF-2017).pdf Strace — новые возможности (Дмитрий Левин, OSSDEVCONF-2017).pdf Strace — новые возможности (Дмитрий Левин, OSSDEVCONF-2017).pdf Strace — новые возможности (Дмитрий Левин, OSSDEVCONF-2017).pdf Strace — новые возможности (Дмитрий Левин, OSSDEVCONF-2017).pdf Strace — новые возможности (Дмитрий Левин, OSSDEVCONF-2017).pdf Strace — новые возможности (Дмитрий Левин, OSSDEVCONF-2017).pdf Strace — новые возможности (Дмитрий Левин, OSSDEVCONF-2017).pdf Strace — новые возможности (Дмитрий Левин, OSSDEVCONF-2017).pdf Strace — новые возможности (Дмитрий Левин, OSSDEVCONF-2017).pdf Strace — новые возможности (Дмитрий Левин, OSSDEVCONF-2017).pdf Strace — новые возможности (Дмитрий Левин, OSSDEVCONF-2017).pdf Strace — новые возможности (Дмитрий Левин, OSSDEVCONF-2017).pdf

Thesis

Введение

strace как инструмент мониторинга взаимодействия пользовательских процессов с ядром существует уже почти 26 лет и широко применяется для диагностики, отладки и изучения поведения ПО. Многочисленные параметры управления фильтрацией дают возможность пользователю strace легко и гибко настраивать отображение системных вызовов и сигналов. С каждым выпуском strace таких возможностей становится больше, а точность отображения — выше.

Начиная с версии 4.13, выпущенной летом прошлого года, расписание выпусков новых версий strace синхронизировано с расписанием выпусков новых версий ядра linux. Таким образом новые интерфейсы, добавляемые в релизы ядра linux, сопровождаются соответствующими парсерами, добавляемыми в релизы strace.

Помимо многочисленных улучшений отображения системных вызовов, за минувший год в strace было реализовано много нового и интересного.

System Call Specification

Синтаксис описания множества системных вызовов существенно расширился:

  • В описании имён системных вызовов теперь поддерживаются регулярные выражения:
 strace -e trace=/regexp
  • В описании множества системных вызовов поддерживаются описания, которым не соответствует ни одного системного вызова:
 strace -e trace=?set
  • Имена классов системных вызовов теперь начинаются с префикса %:
 strace -e trace=%class \\

Прежний способ именования классов без префикса % ещё поддерживается, но уже считается устаревшим.

  • Добавлены новые классы системных вызовов:
%stat
stat, stat64, oldstat и их вариации;
%lstat
lstat, lstat64, oldlstat и их вариации;
%fstat
fstat, fstat64, fstatat64, newfstatat, oldfstat и их вариации;
%%stat
stat, lstat, fstat, fstatat, statx и их вариации;
%statfs
эквивалент /\textasciicircum(.*_)?statv?fs;
%fstatfs
эквивалент /fstatv?fs;
%statfs
эквивалент /statv?fs|fsstat|ustat.

System call tampering и fault injection

Механизм syscall fault injection, прототип которого подробно рассматривался на этой конференции год назад, был доработан и включён в strace, начиная с версии 4.15, выпущенной в декабре прошлого года. По сравнению с прототипом, синтаксис syscall fault injection изменился и выглядит следующим образом:

-e fault=set[:error=errno][:when=expr]

Начиная с версии 4.16, выпущенной в феврале прошлого года, реализован более общий механизм вмешательства в системные вызовы, который, помимо syscall fault injection, позволяет осуществлять syscall return value injection и signal injection. Интерфейс этого нового механизма выглядит следующим образом:

-e inject=set[:error=errno|:retval=value][:signal=sig][:when=expr]

Netlink socket parsers

В strace версии 4.19, выпущенной в начале сентября, реализовано детальное декодирование трафика, проходящего через netlink sockets, что позволяет использовать strace для отладки приложений, работающих с netlink-протоколами. Так, например, может выглядеть вывод парсера трафика семейства NETLINK_ROUTE:

Advanced syscall filtering syntax

В рамках GSoC 2017 Николай Марчук реализовал прототип ещё более гибкого синтаксиса фильтрации системных вызовов:

[action</b>(]<b>filter_expression</b>[;<b>arg1</b>[;<b>arg2</b>...]][)]

где

action
это <b>trace, abbrev, verbose, raw, read, write, fault, inject, или stacktrace;
arnN
это аргументы action</b>;
filter_expression
состоит из комбинации фильтров, каждый их которых, в свою очередь, состоит из имени фильтра и аргументов фильтра.

Поддерживаются следующие фильтры:

syscall set
множество системных вызовов, соответствующих описанию <b>set</b>.
fd fd1
множество системных вызовов, оперирующих дескрипторами, соответствующими описанию <b>fd1</b>…;
path path
множество системных вызовов, оперирующих файлами, соответствующими описанию <b>path</b>.

Комбинация фильтров осуществляется с помощью операторов <b>not, and, or и круглых скобок.

Более подробно новый синтаксис описан в strace(1).

Advanced syscall tampering and filtering with Lua/LuaJIT

В рамках GSoC 2017 Виктор Крапивенский реализовал прототип Lua-скриптинга, который позволяет не только производить фильтрацию и подмену системных вызовов с большей гибкостью, но и производить success injection с сохранением семантики системного вызова, которая, в частности, может заключаться в записи определённых данных в адресное пространство процесса. Подробнее об этом расскажет автор в своём докладе.

Advanced syscall information tool

В рамках GSoC 2017 Эдгар Казиахмедов реализовал прототип новой утилиты asinfo, предназначенной для получения разнообразной информации о системных вызовых. Подробнее об этом расскажет автор в своём докладе.

Примечания и ссылки

Strace — новые возможности (Дмитрий Левин, OSSDEVCONF-2017)!.jpg

Plays:254   Comments:0