Потому что не существует понятия имени системного вызова на том низком уровне. Нет никакого способа strace
сказать «Эй, давай fcntl()
позвоним и посмотрим, что это за номер!». Он может совершать звонки только на основе номеров системных вызовов. Это связано с тем, что системный вызов выполняется, когда номер системного вызова сохраняется в регистре eax
или rax
, а процесс вызывает int 0x80
или syscall
.
почему strace не использует тестовые системные вызовы, чтобы узнать их индексы в таблице системных вызовов?
Я понимаю, что эта strace
команда используется ptrace(PTRACE_PEEKUSER, child, __builtin_offsetof(struct user, regs.orig_eax))
для поиска индекса системного вызова, в который попадает дочерний элемент трассировки. Затем, чтобы перевести индекс в имя функции syscall, он построил таблицы, сделанные на основе поиска заголовков исходного кода linux, присутствующих в установке.
Этот метод должен быть недокументированным и склонным к сбою, поскольку расположение и синтаксис объявлений исходного кода не документированы, должны быть найдены с помощью grepping и могут изменяться неизвестными способами. Я правильно сказал это?
Если это так, то почему бы strace
не использовать следующий метод, который, как мне кажется, проще, опирается только на документацию и, следовательно, надежен.
В начале первого запуска после перезагрузки strace
отправляет тестовый системный вызов, по одному для каждой функции системного вызова, перехватывает его и наблюдает, какой индекс системного вызова использует этот дочерний элемент. Это дает полную и правильную пользовательскую таблицу, которая может быть сохранена в файле, известном для дальнейших вызовов strace
.
Я уверен, что этот метод должен быть рассмотрен, так как он не является чем-то особенно гениальным. Так что должно быть что-то не так с этим. Что случилось??
1 ответ на вопрос
Похожие вопросы
-
1
Будут ли рекурсивные системные вызовы strace watch на дочерних процессах наблюдаемого основного проц...
-
1
Почему strace / truss иногда «исправляет» застрявшие процессы?
-
1
Странное поведение strace и setuid: разрешение не разрешено, но не работает нормально
-
-
2
Как работает «strace»?
-
5
Linux эквивалентен Mac OS X's fs_usage
-
2
Отладка тайм-аутов соединения с использованием strace?
-
2
Как мне связать всю систему?
-
1
Как рассчитать и сгруппировать временные различия указанных системных вызовов при запуске strace
-
2
Взаимодействие с именем процесса вместо PID
-
1
Что такое SIG_0 при взгляде на полосу