Как я могу перечислить нефильтрованные системные вызовы Linux?

Каков наилучший способ перечислить все доступные системные вызовы Linux?

Чтобы уточнить, я спрашиваю, как узнать, какие системные вызовы фильтруются с помощью seccomp при работе в контейнерной среде.

One Solution collect form web for “Как я могу перечислить нефильтрованные системные вызовы Linux?”

Я нашел два возможных способа enums системных вызовов Linux. Один включает в себя однострочную версию bash , но зависит от вашего дистрибутива, который отправляет все соответствующие страницы. Другой, strace , инструмент, который можно использовать для обнаружения и отслеживания любых возможных системных вызовов.

Трассирование

strace можно найти на GitHub и GitLab . Я не могу поручиться за вашу среду, и если вы хотите проверить системные вызовы внутри контейнера, это решение не будет идеальным, однако оно работает лучше, чем однострочная shell bash, так как man-страницы могут быть не установлены.

Фильтровать по типу системного вызова:

 strace -e trace=%desc Trace all file descriptor related system calls. %file Trace all system calls which take a file name as an argument. %fstat Trace fstat and fstatat syscall variants. %fstatfs Trace fstatfs, fstatfs64, fstatvfs, osf_fstatfs, and osf_fstatfs64 system calls. %ipc Trace all IPC related system calls. %lstat Trace lstat syscall variants. %memory Trace all memory mapping related system calls. %network Trace all the network related system calls. %process Trace all system calls which involve process management. %pure Trace syscalls that always succeed and have no arguments. %signal Trace all signal related system calls. %stat Trace stat syscall variants. %statfs Trace statfs, statfs64, statvfs, osf_statfs, and osf_statfs64 system calls. %%stat Trace syscalls used for requesting file status. %%statfs Trace syscalls related to file system statistics. 

Однако, если у вас есть список определенных системных вызовов, которые вы хотите найти, вы можете использовать следующую команду:

 strace -e [syscall1],[syscall2],[syscall3],...,[syscalln] 

Я также включаю этот блог для получения дополнительной информации о strace.

Баш однострочный

Я буду ссылаться на справочную страницу по системным вызовам, ссылка 1, ссылка 2 , а также на эту веб-страницу с советами о том, как выполнить задачу enums всех доступных системных вызовов для данной системы Linux.

Человек на веб-странице предлагает вам ссылаться на свои man-страницы для получения полного списка системных вызовов. Этот пример дает вывод в аннотированном списке.

 ls /usr/share/man/man2 | sed -es/.2.gz//g | xargs man -s 2 -k | sort | grep -v 'unimplemented system calls' 

Заключение

Опять же, я хотел бы заметить, что если вашему дистрибутиву не удастся отгрузить все ваши пакеты со всеми их соответствующими страницами руководства, то однострочная shell bash потерпит неудачу. Если вывод аннотированного списка не нужен, и это решение не соответствует желаемому результату, пожалуйста, обновите ваш пост, чтобы лучше определить, какова ваша цель.

Я также включу ссылку на инструмент Python, используемый для поиска системных вызовов . Это может быть хорошим справочным материалом для сравнения обнаруженных системных вызовов с доступными.

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

Удачи!

Interesting Posts

Сохранять определенный результат для переменной оболочки

Использование процессора увеличивается с установленной 4 ГБ оперативной памяти

Цвет PS1 на основе предыдущего выходного файла

Поиск и замена управляющих символов (^ @, ^ M, ^ I …) в vi

Что такое время компиляции, время загрузки и время выполнения?

Can 'ssh <host> <command>' настраивается всегда на загрузку файлов на стороне сервера?

Как создать репозиторий для моего настраиваемого дистрибутива?

У меня есть несколько python на моем компьютере? и как удалить один из них?

Как изменить положение пусковой установки единства в Ubuntu?

Удалите папку с тем же именем, что и переменная среды

Настройка туннелирования ssh для просмотра с использованием IP-адреса компьютера в частной сети

Как создать новый раздел на жестком диске?

Пример добавления

Почему шаблон «команда || правда "полезно?

Запуск uuidd автоматически при запуске на сервере Ubuntu 13.10?

Linux и Unix - лучшая ОС в мире.