Рубрика «системные вызовы»
Операционная система в 1 000 строк кода (часть 4)
2025-01-31 в 13:01, admin, рубрики: qemu, ruvds_перевод, операционные системы, Программирование, разработка ос, системные вызовыАссемблер для программистов на языках высокого уровня: условные конструкции
2024-09-23 в 13:01, admin, рубрики: ruvds_перевод, x86-64, ассемблер, системные вызовы, условные конструкции, язык ассемблера
В предыдущей статье мы познакомились с основами синтаксиса языка ассемблера и смогли создать программу на основе всего двух команд. Впечатляющий результат!
На этом уроке мы изучим новые команды и воспользуемся этими знаниями, чтобы перенести на язык ассемблера первую конструкцию высокого уровня: условные конструкции.Читать полностью »
Ассемблер для программистов на языках высокого уровня: Hello World
2024-09-18 в 13:01, admin, рубрики: hello world, ruvds_перевод, x86-64, ассемблер, системные вызовы, язык ассемблера
Если вы начинали изучение программирования с JavaScript, Rust, C или любого другого высокоуровневого языка, то ассемблерный код может показаться вам непонятным или даже пугающим.
Рассмотрим следующий код:
section .data
msg db "Hello, World!"
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, 13
syscall
mov rax, 60
mov rdi, 0
syscall
К счастью, по второй строке мы можем понять, что он делает.
Здесь нет ничего привычного нам: мы не видим ни условных операторов, ни циклов, нет никакого способа создавать функции… Да даже у переменных нет имён!
С чего же вообще начать?
Это небольшое введение предназначено для того, чтобы познакомить имеющих опыт в программировании с миром ассемблера. Мы обсудим основы языка и сопоставим их с конструкциями высокоуровневого программирования.
Завершив прочтение этого руководства, вы сможете ориентироваться в ассемблерном коде, будете знать, где искать информацию, и даже сможете самостоятельно писать простые программы.Читать полностью »
Утраченный потенциал подсистемы Windows для Linux (WSL)
2021-01-06 в 6:45, admin, рубрики: BSD, environment subsystems, fork–exec, NetBS, ntfs, UNIX, win32, Windows NT, WSL 1, wsl 2, архитектура Windows, внутренние подсистемы, интегрированные подсистемы, подсистема Linux, подсистемы окружения, прерывания, разработка под windows, Серверное администрирование, системное программирование, системные вызовыЕсли вы несколько лет вообще не следили за Windows 10 и не знаете, что происходит, то пропустили одну вещь — очень горячей темой для разработчиков стала подсистема Windows для Linux, она же WSL. Среди программистов очень часто её обсуждают. Действительно, потрясающе интересная штука.
Наконец-то у нас появилась возможность запустить свой инструментарий Linux на Windows наравне с виндовыми программами. А это значит, что больше не нужно изучать странный PowerShell или пользоваться архаичной консолью CMD.EXE
.
К сожалению, не всё так радужно. WSL по-прежнему является неким инородным элементом, который отделён от родной среды Windows. В частности, не может взаимодействовать с «родными» инструментами Windows.
Читать полностью »
Реализация epoll, часть 4
2020-11-09 в 15:48, admin, рубрики: epoll, linux, ruvds_перевод, Блог компании RUVDS.com, Программирование, разработка, Разработка под Linux, системное программирование, системные вызовыЭто — последний материал из серии четырёх статей (часть 1, часть 2, часть 3), посвящённой реализации epoll
. Тут речь пойдёт о том, как epoll
передаёт события из пространства ядра в пользовательское пространство, и о том, как реализованы режимы срабатывания по фронту и по уровню.
Эта статья написана позже остальных. Когда я начинал работу над первым материалом, самой свежей стабильной версией ядра Linux была 3.16.1. А во время написания данной статьи это уже версия 4.1. Именно на коде этой версии ядра и основана данная статья. Код, правда, изменился не особенно сильно, поэтому читатели предыдущих статей могут не беспокоиться о том, что что-то в реализации epoll
очень сильно изменилось.
Читать полностью »
Реализация epoll, часть 3
2020-11-08 в 13:15, admin, рубрики: epoll, linux, ruvds_перевод, Блог компании RUVDS.com, Программирование, разработка, Разработка под Linux, системное программирование, системные вызовыВ предыдущих двух материалах (часть 1, часть 2) этой серии речь шла об общих вопросах работы epoll
, и о том, как epoll
получает уведомления о новых событиях от файловых дескрипторов, за которыми наблюдает. Здесь я расскажу о том, как epoll
хранит уведомления о событиях, и о том, как эти уведомления получают приложения, работающие в пользовательском режиме.
Сетевики нужны и вот почему
2020-10-30 в 9:15, admin, рубрики: linux, netcat, tcp, telnet, Блог компании RUVDS.com, Настройка Linux, Сетевые технологии, сети, системное администрирование, системные вызовы
Картинка взята из телнет-видео «Звёздных войн»: telnet towel.blinkenlights.nl
Недавно был пост о том, нужны ли сетевики. До тех пор, пока проверка доступности tcp/ip порта кажется чем-то сложным даже для администраторов БД и AD, сетевики несомненно нужны. Они особенно полезны в тех случаях, когда необходимо понять почему так плохо работает некое клиент-серверное приложение ценой в пароход.
Иногда мало знать ping и traceroute для того, чтобы понять и устранить проблему в сети. Необходимо понимать как работают все звенья в цепи, а сделать это может лишь сетевик. Рассмотрим несколько таких примеров.Читать полностью »
Встраиваем Lua интерпретатор в проект для микроконтроллера (stm32)
2019-07-16 в 10:42, admin, рубрики: C, cmake, Lua, stm32, микроконтроллеры, отладка, программирование микроконтроллеров, системные вызовыВ достаточно крупных приложениях немалую часть проекта составляет бизнес-логика. Эту часть программы удобно отлаживать на компьютере, после чего встраивать в состав проекта для микроконтроллера, ожидая, что эта часть будет выполняться в точности так, как было задумано без какой-либо отладки (идеальный случай).
Так как большинство программ для микроконтроллеров пишется на С/C++, то для этих целей обычно используют абстрактные классы, предоставляющие интерфейсы к низкоуровневым сущностям (в случае, если проект пишется только с использованием C, то зачастую используются структуры указателей на функции). Данный подход предоставляет требуемый уровень абстракции над железом, однако чреват надобностью в постоянной повторной компиляции проекта с последующим программированием энергонезависимой памяти микроконтроллера бинарным файлом прошивки большого объема.
Однако есть и другой путь — использование скриптового языка, позволяющего производить отладку бизнес-логики в реальном времени на самом устройстве или загружать сценарии работы прямо с внешней памяти, не включая данного кода в состав прошивки микроконтроллера.
В качестве скриптового языка я выбрал Lua.Читать полностью »
Перехват функций в ядре Linux с помощью ftrace
2018-06-05 в 5:57, admin, рубрики: C, ftrace, hooking, hooks, kernel module, kprobes, linux, linux kernel, перехват функций, Разработка под Linux, системное программирование, системные вызовы, сплайсинг, хуки, ядро LinuxВ одном проекте, связанном с безопасностью Linux-систем, нам потребовалось перехватывать вызовы важных функций внутри ядра (вроде открытия файлов и запуска процессов) для обеспечения возможности мониторинга активности в системе и превентивного блокирования деятельности подозрительных процессов.
В процессе разработки нам удалось изобрести довольно неплохой подход, позволяющий удобно перехватить любую функцию в ядре по имени и выполнить свой код вокруг её вызовов. Перехватчик можно устанавливать из загружаемого GPL-модуля, без пересборки ядра. Подход поддерживает ядра версий 3.19+ для архитектуры x86_64.
Читать полностью »
Персистентная ОС: ничто не блокируется
2016-04-26 в 15:06, admin, рубрики: CRIU, java, Компиляторы, ооп, синхронизация, системное программирование, системные вызовыЭто — статья-вопрос. У меня нет идеального ответа на то, что здесь будет описано. Какой-то есть, но насколько он удачен — неочевидно.
Статья касается одной из концептуальных проблем ОС Фантом, ну или любой другой системы, в которой есть персистентная и «волатильная» составляющие.
Для понимания сути проблемы стоит прочесть одну из предыдущих статей — про персистентную оперативную память.
Краткая постановка проблемы: В силу того, что прикладная программа в ОС Фантом персистентна (не перезапускается при перезагрузке), а ядро — нет (перезапускается при перезагрузке и может быть изменено между запусками), в такой системе нельзя делать блокирующие системные вызовы. Обычным способом.
Читать полностью »