mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк 

Златоуст.Ru

 

 

PTRACE(2)                                             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, и da-
	     ta игнорируются и возвращаемое значение не опреде-
	     лено.  Если  родительский  процесс  не  собирается
	     трассировать порожденный процесс, результаты будут
	     непредсказуемыми.

	Вызовы с остальными значениями аргумента request  могут
	использоваться только родительским процессом. Для  всех
	этих вызовов аргумент pid обозначает идентификатор  по-
	рожденного процесса. Вызовы имеют смысл,  только  когда
	порожденный процесс приостановлен.

	1,2  При этих значениях request  родительскому процессу
	     возвращается  слово  по  адресу  addr  в  адресном
	     пространстве порожденного процесса.  Оба  значения
	     request приводят к одинаковым результатам. Игнори-
	     руется аргумент data.

	3    Родительскому  процессу  возвращается   слово   из
	     структуры u типа user, находящейся в системном ад-
	     ресном  пространстве  [см.  ]  и соот-
	     ветствующей порожденному процессу.  Аргумент  addr
	     задает смещение слова относительно начала структу-
	     ры.  Аргумент data игнорируется. Вызов завершается
	     неудачей, если указанное слово находится за преде-
	     лами этой структуры, в этом  случае  родительскому
	     процессу  возвращается  -1, а переменной родитель-
	     ского процесса errno присваивается значение EIO.

	4,5  При этих значениях request аргумент data записыва-
	     ется по адресу addr в адресном пространстве порож-
	     денного процесса. Оба значения request приводят  к
	     одинаковым результатам.  При  успешном  завершении
	     возвращается результат, равный записанному  значе-
	     нию; в  противном  случае  родительскому  процессу
	     возвращается -1, а переменной  родительского  про-
	     цесса errno присваивается значение EIO.

	6    Это значение аргумента request позволяет  изменить
	     некоторые поля в структуре u типа user, соответст-
	     вующей  порожденному  процессу. Значение аргумента
	     data записывается в слово,  смещение  которого  от
	     начала структуры u задается аргументом addr. Могут
	     быть изменены лишь следующие компоненты:

	     1. Регистры общего назначения.

	     2. Признаки результата в слове состояния процессо-
		ра.

	     Поле  u_ar0  структуры u содержит адрес массива, в
	     котором сохраняются регистры, как общего  назначе-
	     ния,  так  и специальные. Чтобы вычислить смещение
	     этого массива от начала структуры, нужно  в  файле
	     /unix найти имя u, извлечь адрес структуры и затем
	     вычесть его из значения поля u_ar0. Порядок распо-
	     ложения  регистров  в упомянутом массиве описан во
	     включаемом файле .

	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).



 

 

Бернадинер Марк Абрамович

Мое резюме

Компьютерная страничка

Ресурсы сети

Фотоальбом

 

 

 

mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк