syscall.sh - Полные таблицы системных вызовов Linux для 27 архитектур
Show HN: I've updated my Linux System Call website and API

syscall.sh — это обновлённый сайт и API, где собраны все таблицы системных вызовов Linux в одном месте. Для 27 архитектур, от x64 до экзотических вроде m68k и sparc, вы найдёте номера вызовов, аргументы, регистры и историю появления каждого вызова в ядрах от 3.3 до 7.3. Данные берутся напрямую из исходников ядра, поэтому это реальные номера, которые использует ядро. Каждая таблица доступна как JSON-файл, а API позволяет получать информацию о вызовах для любого релиза ядра. Проект будет полезен разработчикам низкоуровневого ПО, исследователям безопасности и всем, кто работает с системными вызовами.
Каждая таблица архитектуры с полной историей появления и удаления системных вызовов — это ещё и обычный JSON-файл, который можно использовать где угодно.
- ozgrakkurt
Также рекомендую использовать такие команды:
echo '#include <sys/syscall.h>' | gcc -E -dM -xc - | grep -i "read"
Чтобы получить реальные значения на вашем ПК и убедиться.
Несколько раз LLM выдавали мне неправильные числа или определения констант, но если заставить их сгенерировать такую команду и увидеть всё самому, это работает каждый раз.
Кроме того, в документации chromium есть таблица:
https://www.chromium.org/chromium-os/developer-library/refer...
Было бы очень полезно, если бы этот сайт напрямую ссылался на номер системного вызова.
- bkallus
На x86_64 и x32 номер системного вызова передаётся в eax, а не в rax. Старшие 32 бита rax игнорируются и могут быть любыми.
- guitmz
Я также сделал CLI для просмотра API системных вызовов, когда изначально выпустил сайт. Думаю, я могу привести код в порядок и тоже сделать его публичным. Он использует встроенный набор данных, так что не нужно постоянно обращаться к конечной точке API.
- DustinBrett
Этот сайт почему-то ломает мне графику.
- wg0
Это действительно отличный ресурс, не знал о нём. Но один вопрос, не связанный с сайтом выше — почему системные вызовы различаются для разных архитектур, если API Linux один и тот же?
Или я путаю это со стандартной библиотекой C/POSIX и предполагаю, что так должно быть везде?