← На главную

Веб-сервер на ассемблере для aarch64 без libc

08.05.2026 13:39 · hackernews

Разработчик написал проект Ymawky, это статичный веб-сервер, написанный исключительно на языке ассемблера для архитектуры aarch64 под MacOS. Он полностью отказался от библиотек libc, оперируя только прямыми системными вызовами ядра, что позволяет понять внутреннее устройство работы серверов без лишних абстракций. Хотя такой подход не заменит современные решения типа nginx или Apache, он демонстрирует, как вручную обрабатывать каждый байт входящего запроса. Сервер реализует методы GET, PUT, DELETE и даже умеет выставлять список файлов в директории, но всё делает сам: от парсинга заголовков HTTP до перевода процентного кодирования в обычные символы.

Главное препятствие — отсутствие готовых функций. Парсинг строки вручную в ассемблере требует тщательной проверки каждого байта, чтобы не вылезти за пределы буфера или не сломать кодировку. Например, функция streqn для сравнения строк работает посимвольно, пока не достигнет конца или не найдёт несовпадение. При работе с методом PUT сервер создаёт временные файлы для безопасной записи, чтобы избежать ситуации, когда данные обрываются посередине. Также реализована защита от атак типа Slowloris: если клиент не отправляет данные достаточно быстро, сервер закрывает соединение, используя таймеры через системные вызовы setitimer и сигналы SIGALRM.

Особое внимание уделено безопасности. Запрещены переходы по ссылкам-символам благодаря флагу O_NOFOLLOW_ANY и проверка на попытки выхода за пределы корневого каталога, даже если используются ".." в пути. Для обработки таймаутов на macOS приходится обходиться специальными методами, так как стандартная обработка сигналов слишком сложна для этой задачи. Кроме того, используется малоизвестный системный вызов proc_info для отслеживания количества активных дочерних процессов и отклонения новых подключений, если их число превышает лимит. Код загружен на GitHub, и автор призывает других разработчиков попробовать свои силы в создании сложных системных программ на низком уровне.

Читать оригинал →