ptrace - ptrace

редактировать
Инструмент анализа в Unix-подобных системах

ptrace - это системный вызов, найденный в Unix и несколько Unix-подобных операционных систем. Используя ptrace (название является сокращением от «process trace») один процесс может управлять другим, позволяя контроллеру проверять и управлять внутренним состоянием своей цели. ptrace используется отладчиками и другими инструментами анализа кода, в основном как вспомогательные средства при разработке программного обеспечения.

Содержание
  • 1 Использует
  • 2 Ограничения
  • 3 Поддержка
    • 3.1 Unix и BSD
    • 3.2 macOS
    • 3.3 Linux
    • 3.4 Android
  • 4 Ссылки
  • 5 Внешние ссылки
Использует

ptrace используется отладчиками (такими как gdb и dbx ), инструментами трассировки, такими как strace и ltrace и инструментами покрытия кода. ptrace также используется специализированными программами для исправления запущенных программ, предотвращения не исправленных ошибок или преодоления функций безопасности. Кроме того, он может использоваться как песочница и как имитатор среды выполнения (например, имитация корневого доступа для некорневого программного обеспечения).

Присоединяясь к другому процессу с помощью вызова ptrace, инструмент имеет обширный контроль над работой своей цели. Это включает манипулирование его файловыми дескрипторами, памятью и регистрами. Он может пошагово выполнять код цели, может наблюдать и перехватывать системные вызовы и их результаты, а также может манипулировать обработчиками signal цели, а также получать и отправлять сигналы от своего имени. Возможность записи в память цели позволяет изменять не только ее хранилище данных, но и собственный сегмент кода приложения, позволяя контроллеру устанавливать точки останова и исправлять работающий код цель.

Поскольку способность проверять и изменять другой процесс очень мощная, ptrace может подключаться только к процессам, которым владелец может посылать сигналы (обычно только их собственные процессы); Учетная запись суперпользователя может отслеживать практически любой процесс (кроме init в ядрах до 2.6.26). В системах Linux, которые имеют безопасность на основе возможностей, возможность ptrace дополнительно ограничивается возможностью CAP_SYS_PTRACE или YAMA Linux Security Module. В FreeBSD он ограничен политиками FreeBSD jails и Mandatory Access Control.

Ограничения

Обмен данными между контроллером и целью осуществляется с использованием повторяющихся вызовов ptrace, при этом между ними передается небольшой блок памяти фиксированного размера (что требует двух переключателей контекста за звонок); это крайне неэффективно при доступе к большим объемам целевой памяти, поскольку это может быть сделано только в блоках размером word (с вызовом ptrace для каждого слова). По этой причине 8-е издание Unix представило procfs, который разрешает разрешенным процессам прямой доступ к памяти другого процесса - за ним последовала 4.4BSD, а для поддержки отладчика было использовано использование / proc. унаследован Solaris, BSD и AIX и в основном копируется Linux. Некоторые, такие как Solaris, полностью удалили ptrace как системный вызов, сохранив его как библиотечный вызов, который переинтерпретирует вызовы ptrace с точки зрения procfs платформы. Такие системы используют ioctls в файловом дескрипторе открытого файла / procдля выдачи команд контролируемому процессу. FreeBSD на С другой стороны, расширенный ptrace для устранения упомянутых проблем и объявленный procfs устаревшим из-за присущих ему проблем проектирования.

ptrace предоставляет только самый базовый интерфейс, необходимый для поддержки отладчиков и подобных инструментов. Программы, использующие его, должны досконально разбираться в специфике ОС и архитектуры, включая структуру стека, двоичный интерфейс приложения, механизм системного вызова, изменение имени, формат любых данных отладки, и несут ответственность за понимание и дизассемблирование машинного кода. Кроме того, программы, которые вводят исполняемый код в целевой процесс или (например, gdb) позволяют пользователю вводить команды, которые выполняются в контексте цели, должны сами генерировать и загружать этот код, как правило, без помощи загрузчика программ ..

Поддержка

Unix и BSD

ptrace впервые была реализована в версии 6 Unix и присутствовала как в SVr4, так и в 4.3BSD ветки Unix. ptrace доступен как системный вызов на IRIX, IBM AIX, NetBSD, FreeBSD, OpenBSD и Linux. ptrace реализован как вызов библиотеки в Solaris, построенный на файловой системе procfs ядра Solaris; Sun отмечает, что ptrace в Solaris предназначена для обеспечения совместимости, и рекомендует, чтобы новые реализации использовали более богатый интерфейс, предоставляемый proc. UnixWare также имеет ограниченную ptrace, но, как и Sun, SCO рекомендует разработчикам использовать вместо этого базовые функции procfs.. HP-UX поддерживал ptrace до выпуска 11i v3 (он устарел в пользу ttrace, аналогичного вызова для ОС в 11i v1).

macOS

Apple macOS также реализует ptrace как системный вызов. Версия Apple добавляет специальную опцию PT_DENY_ATTACH - если процесс вызовет эту опцию на себе, последующие попытки ptrace процесса потерпят неудачу. Apple использует эту функцию, чтобы ограничить использование отладчиков в программах, которые манипулируют контентом с DRM, включая iTunes. PT_DENY_ATTACH on также отключает возможность DTrace контролировать процесс. Отладчики в OS X обычно используют комбинацию ptrace и Mach ВМ и API потоков. ptrace (снова с PT_DENY_ATTACH) доступен разработчикам для Apple iPhone.

Linux

Linux также дает процессам возможность предотвращать присоединение к ним других процессов. Процессы могут вызвать системный вызов prctlи сбросить свой флаг PR_SET_DUMPABLE; в более поздних ядрах это не позволяет некорневым процессам отслеживать вызывающий процесс; агент аутентификации OpenSSH использует этот механизм для предотвращения перехвата сеанса ssh через ptrace. Более поздние версии Ubuntu поставляются с ядром Linux, настроенным для предотвращения присоединения ptrace от процессов, отличных от родительского отслеживаемого процесса; это позволяет gdb и strace продолжать работу при запуске целевого процесса, но предотвращает их подключение к несвязанному запущенному процессу. Управление этой функцией осуществляется с помощью параметра / proc / sys / kernel / yama / ptrace_scope. В системах, где эта функция включена, такие команды, как «gdb --attach» и «strace -p» не будут работать.

Начиная с Ubuntu 10.10, ptrace разрешено вызывать только для дочерних процессов.

Android

Для некоторых Android телефоны с заблокированным загрузчиком, ptrace используется для получения контроля над процессом инициализации, чтобы включить «вторую загрузку» и заменить системные файлы.

Ссылки
Внешние ссылки
Последняя правка сделана 2021-06-02 09:59:05
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте