Что это такое?
syscalls-cpp
— это кроссплатформенная C++-библиотека, предоставляющая безопасный, читаемый и расширяемый способ вызывать системные вызовы Linux на низком уровне, используя исключительно C++, без необходимости в ассемблерных вставках или сторонних зависимостях.Она позволяет напрямую обращаться к системным вызовам ядра Linux (например,
write
, open
, mmap
, clone
, exit
и др.), что полезно в:- разработке низкоуровневого ПО;
- создании песочниц и изолированных окружений;
- анализе поведения ядра и взаимодействий с ним;
- написании эмуляторов, рантаймов и безопасных проксирующих обёрток.
Особенности
Без inline-ассемблера — написано полностью на C++
Типобезопасность — аргументы обёрнуты в строго типизированные структуры
Кроссплатформенность — поддержка x86_64 и aarch64
Читаемый код — проще в понимании и сопровождении
Расширяемость — можно добавлять новые вызовы без хака сборок
Минимум зависимостей — чистый C++ и headers-only библиотека
🛠 Пример использования
C++:
#include <syscalls/linux/x86_64/syscall.hpp>
#include <syscalls/linux/write.hpp>
int main() {
char msg[] = "Hello from raw syscall!\n";
syscalls::linux::syscall(
syscalls::linux::write::number,
syscalls::linux::write::fd(1),
syscalls::linux::write::buf(msg),
syscalls::linux::write::count(sizeof(msg))
);
return 0;
}

Архитектура
Каждый системный вызов описывается в виде пространства имён, включающего:- номер вызова (number);
- структуру аргументов с именами (fd, buf, count и т.д.);
- реализацию вызова через функцию syscall(...).
Это даёт как удобство, так и защиту от ошибок на этапе компиляции.
Поддерживаемые вызовы (неполный список)
- read, write
- open, close
- mmap, munmap
- clone, exit
- mprotect, sigreturn, nanosleep
- и другие

Зачем это может понадобиться?
- Разработка системного ПО, где важен прямой контроль
- Имплементация собственных рантаймов или оболочек без зависимостей
- Анализ и отладка взаимодействия с ядром Linux
- Разработка CTF-челленджей, exploit'ов или безопасных песочниц
Безопасность
Поскольку библиотека работает напрямую с syscall-интерфейсом ядра, вся ответственность за корректные параметры ложится на программиста. Это мощный, но "острый" инструмент. Используйте с умом!
Как использовать
Скрытое содержимое доступно для зарегистрированных пользователей!