отслеживание системных вызовов с использованием ptrace - PullRequest
1 голос
/ 19 марта 2012

Я написал программу для вывода списка всех системных вызовов, выполняемых командой (скажем, / bin / ls).Теперь я пытаюсь найти все аргументы системного вызова, переменные окружения, аргументы командной строки, которые могут быть ему переданы

Пример: если я открою файл.Системный вызов sys_access откроет файл правильно?Но как получить эти значения?
Хотите сделать это для системных вызовов, таких как open, read, write, close.

Согласно моему исследованию, они должны быть в регистрах (ebx - edx). Если да, то что означают эти значения регистра?означает?Я получил эту ссылку .
Но я действительно не мог многого оттуда получить.Также любые дальнейшие ссылки для этого были бы очень полезны.

1 Ответ

0 голосов
/ 20 марта 2012

(пересмотренная форма комментариев выше (чтобы вы могли ее принять)):

Подробные параметры системного вызова можно найти в заголовке ядра Linux syscalls.h . В вышеприведенном случае, поскольку sys_access (# 33 на x86) имеет только два параметра:

  • сначала указатель на имя файла, поэтому имя вашего файла было сохранено по адресу 0x4c4d8e
  • Второй параметр - файловый режим (см. Определение флага режима)
  • поскольку в этом системном вызове нет третьего параметра, edx не имеет значения и содержит некоторое неопределенное значение

Возвращаемое значение этого системного вызова - -2 (ENOENT, определенный в errno-base.h ), что означает ошибку (нет такого файла или каталога).

Также обратите внимание (см. Комментарий Basile выше), что вы дублируете функциональность утилиты strace .

...