PTRACE(2)
НАЗВАНИЕ
ptrace - трассировка процесса
СИНТАКСИС
int ptrace (request, pid, addr, data)
int request, pid, addr, data;
ОПИСАНИЕ
Системный вызов ptrace предоставляет средства, используя которые родительский процесс может управлять выполнением порожденного процесса. В первую очередь этот вызов используется для реализации отладчиков с точками
прерывания [см. sdb(1)]. Порожденный процесс работает
обычным образом, пока он не получает сигнал [см. список
в signal(2)], после чего он приостанавливается, а его
родительский процесс получает информацию об этом через
wait(2). Пока порожденный процесс приостановлен, родительский процесс может читать и изменять образ его памяти, вызывая ptrace. Кроме того, родительский процесс
может либо уничтожить порожденный процесс, либо возобновить его выполнение, возможно удалив сигнал, вызвавший остановку.
Аргумент request определяет действия, которые должен
выполнить системный вызов ptrace. Возможны следующие
действия:
0
| Вызов с этим значением request должен быть сделан порожденным процессом, если предполагается его трассировка родительским процессом. Этот вызов устанавливает у порожденного процесса флаг трассировки, вследствии чего порожденный процесс при получении сигнала останавливается, не отрабатывая функции, указанной аргументом системного вызова signal [см. signal(2)]. Аргументы pid, addr, и data игнорируются и возвращаемое значение не определено. Если родительский процесс не собирается трассировать порожденный процесс, результаты будут непредсказуемыми. |
Вызовы с остальными значениями аргумента request могут использоваться только родительским процессом. Для всех этих вызовов аргумент pid обозначает идентификатор по рожденного процесса. Вызовы имеют смысл, только когда порожденный процесс приостановлен. |
1,2
| При этих значениях request родительскому процессу возвращается слово по адресу addr в адресном пространстве порожденного процесса. Оба значения request приводят к одинаковым результатам. Игнорируется аргумент data. |
3
| Родительскому процессу возвращается слово из структуры u типа user, находящейся в системном адресном пространстве [см. <sys/user.h>] и соответствующей порожденному процессу. Аргумент addr задает смещение слова относительно начала структуры. Аргумент data игнорируется. Вызов завершается неудачей, если указанное слово находится за преде лами этой структуры, в этом случае родительскому процессу возвращается -1, а переменной родительского процесса errno присваивается значение EIO. |
4,5
| При этих значениях request аргумент data записывается по адресу addr в адресном пространстве порожденного процесса. Оба значения request приводят к одинаковым результатам. При успешном завершении возвращается результат, равный записанному значению; в противном случае родительскому процессу возвращается -1, а переменной родительского процесса errno присваивается значение EIO. |
6
| Это значение аргумента request позволяет изменить некоторые поля в структуре u типа user, соответствующей порожденному процессу. Значение аргумента data записывается в слово, смещение которого от начала структуры u задается аргументом addr. Могут быть изменены лишь следующие компоненты:
- Регистры общего назначения.
- Признаки результата в слове состояния процессора.
Поле u_ar0 структуры u содержит адрес массива, в котором сохраняются регистры, как общего назначения, так и специальные. Чтобы вычислить смещение этого массива от начала структуры, нужно в файле /unix найти имя u, извлечь адрес структуры и затем вычесть его из значения поля u_ar0. Порядок расположения регистров в упомянутом массиве описан во включаемом файле <sys/reg.h>. |
7
| Вызов с этим значением request служит для возобновления работы порожденного процесса. Если аргумент data равен 0, то до возобновления работы удаляются все полученные, но не обработанные сигналы, включая тот, который вызвал приостановку порожденного процесса. Если аргумент data равен корректному номеру сигнала, то порожденный процесс возобновляет работу так, как будто он получил этот сигнал, а все остальные полученные сигналы удаляются. Аргумент addr задает адрес, с которого возобновляется выполнение порожденного процесса. Если значение addr равно 1, выполнение порожденного процесса возобновляется с места приостановки. При успешном завершении возвращается результат, равный значению аргумента data. Вызов завершается неудачей, если аргумент data не равен 0 или корректному номеру сигнала, в этом случае родительскому процессу возвращается -1, а переменной родительского процесса errno присваивается значение EIO. |
8
| Вызов с этим значением request приводит к уничтожению порожденного процесса с той же последовательностью действий, что и exit(2). |
9
| Вызов с этим значением request устанавливает бит трассировки в слове состояния процессора порожденного процесса и затем совершает действия, описанные для значения request, равного 7. Установленный бит трассировки вызывает прерывания по выполнению каждой машинной команды, что позволяет эффективно трассировать порожденный процесс по одной команде. |
Чтобы предупредить возможный обман, вызов ptrace подавляет возможность переустанавливать действующий идентификатор пользователя при последующих вызовах exec(2).
Если трассируемый процесс вызывает exec, то он до выполнения первой команды из нового выполняемого файла
останавливается, сообщая о получении сигнала SIGTRAP.
Системный вызов ptrace завершается неудачей, если выполнено хотя бы одно из следующих условий:
- [EIO]
- Некорректный параметр request.
- [ESRCH]
- Отсутствует порожденный процесс с идентификатором, равным pid, или он не вызывал
ptrace с параметром request, равным 0.
СМ. ТАКЖЕ
sdb(1), exec(2), exit(2), signal(2), wait(2).
|
![](/pictures/1x1.gif) |
![](/pictures/1x1.gif) |
![](/pictures/1x1.gif) |
|
![](/pictures/1x1.gif) |
![](/pictures/1x1.gif) |
![](/pictures/1x1.gif) |
Новости мира IT:
- 25.07 - В России выросла популярность отечественных облачных хранилищ, хотя молодёжь предпочитает иностранные
- 25.07 - Microsoft добавила сгенерированные ИИ сводки в результаты поиска Bing
- 25.07 - Apple выпустила веб-версию своего картографического сервиса
- 23.07 - Google передумала отказываться от сторонних cookie в Chrome, но обещает повысить конфиденциальность
- 23.07 - Аудитория Telegram достигла 950 миллионов пользователей в месяц
- 23.07 - Alphabet провалила сделку по поглощению Wiz за $23 млрд — стартап счёл предложенные условия унизительными
- 23.07 - Intel признала вину в нестабильности Raptor Lake, но уже знает как всё исправить
- 18.07 - Еврокомиссия выяснит, не мешает ли конкурентам Samsung наличие ИИ-модели Gemini Nano в Galaxy S24
- 18.07 - Huawei будет внедрять искусственный интеллект в тяжёлое машиностроение
- 18.07 - В Китае создали сверхлёгкий дрон, который будет летать, пока светит Солнце
- 18.07 - Дефицит ИИ-чипов сохранится до 2026 года, прогнозируют в TSMC
- 18.07 - Google стала показывать меньше ответов ИИ в поиске после серии «странных» ответов
- 16.07 - Oppo и Ericsson подписали соглашение о перекрёстном лицензировании в сфере сетей 5G
- 16.07 - Акции Apple достигли исторического максимума благодаря ИИ
- 16.07 - Nvidia столкнулась с антимонопольным расследованием во Франции — компании грозит крупный штраф
- 16.07 - ИИ и глобальные амбиции: Аркадий Волож рассказал, чем займётся зарубежная часть «Яндекса» после разделения
- 16.07 - Разработку российской консоли оценили всего в 1 млрд рублей, но в целом денег понадобится куда больше
- 16.07 - Yandex закрыл сделку по продаже «Яндекса»
- 10.07 - Представлен релиз Firefox 128
- 10.07 - Доступна платформа OpenSilver 3.0, продолжающая развитие технологии Silverlight
Архив новостей
|
![](/pictures/1x1.gif) |
![](/pictures/1x1.gif) |
![](/pictures/1x1.gif) |
|
![](/pictures/1x1.gif) |
![](/pictures/1x1.gif) |
![](/pictures/1x1.gif) |
|
|
![](/pictures/1x1.gif) |
![](/pictures/1x1.gif) |
|